I was just reading on Bram Cohen's website about a simple public key encryption algorithm that sounds like it would be fun to try and implement.
On a related tangent, I've been trying to come up with an algorithm that would solve simple cryptogram ciphers1 in a reasonable amount of time. When computer get faster, this will simply be a matter of checking all possible answers and printing out the one that is statistically most accurate; however, the number of possible alphabet combinations is currently a little long for processing, especially in Java.
My idea is to focus on the smaller words (2-4 letters): using a dictionary of smaller words, the number of possible alphabets containing all english words that match the pattern provided is a lot smaller than all possible random combinations. After this first pass, we will know a handful of letters. Subbing them into the rest of the unknown code will make it feasible to sort lists of larger dictionary words according to the way they match those known letters.
Conceptually, this is pretty easy. The hard part would be implementing it; also, I need a good dictionary database. Anyone (meaning, Ryan mainly) know how to access the Microsoft Word dictionary files? That would be pretty cool. Or maybe I can make it interface with http://dictionary.reference.com/... hmmm...
1 A cryptogram substitutes a random letter (that has not been used already) for the current letter in the alphabet. Example:
ABCDEFGHIJKLMNOPQRSTUVWXYZ BDEFGIJKLMOPQUVWXYZTRASHCN