While the answers above are mostly correct, there are exceptions. As mentioned, the One Time Pad is uncrackable, if used correctly (completely randomized text in pads, no pad re-used, pads destroyed after use and kept 100% secure at all times).
When someone says that the OTP has been cracked, read the fine print and you will find a physical security problem (pad wasn't destroyed, or was physically recovered).
Physical security (distribution, safeguarding of the pad) is definitely the weak link in the scheme.
But there are ways to make a OTP pad. Even if the opposition knows the general method, if they don't know the specific inputs to that method (of making the OTP), it could be uncrackable.
Here's a method I came up with--
1. Two non-related plain text sources are scrambled (TRANSPOSITION) against each other to derive the OTP pad. It would probably be relatively easy to communicate these sources, as they'd be the titles of books, EULAs of programs, speeches, articles, etc. innocuously in a conversation. Remember, these sources can only be used ONCE.
2. Then one by one, ADD each clear text character's numerical value (A=1, B=2, etc.) to the numerical value of each character in the pad, MOD 26, and then convert the number back to a letter. This accomplishes SUBSTITUTION.
You could stop there, and it has been encrypted. But frequency analysis will still probably reveal the language. To guard against this possibility, I add a third step:
3. Count the occurrence of each letter of the alphabet within your encrypted text. Take the largest number, and figure out how many of each other letter you need to inject into the text in order to make it 'Homophonic' (frequency neutral). Inject these extra letters according to a set pattern, which accomplishes OBFUSCATION.
To decrypt, first the homophonic letters are extracted (so the recipient also needs to know this pattern). Then the pad needs to be built, as in step #1. Then, SUBTRACT each character's numerical value from the numerical value of each character in the pad, ignore any '-' sign, and convert back to letter. Voila.
(Note: There are various ways of doing the transposition step (#1). You could use Viginere, Rail Fence, or some other method of transposition. But the method I came up with is to look at your letter in the first text, find where it occurs in the second text, then find what character is in that position back in the first text. That's your letter. There are plenty of other ways to do this, too.)
Transposition by itself is horrible. So is Substitution. But if you use the transposed to perform the substitution, and then make it frequency neutral with homophonic injection, even a quantum computer couldn't crack it. --Gordon