The PGP Word List is a clever idea for coding long strings of bits suitable for storing in one’s head. A particular fixed map from 8 bit bytes to words is proposed. Remembering one of the words is tantamount to remembering eight bits.

Another idea occurred to me just now. Choose an easy string hash which produces eight bits. No security properties of that hash are necessary. It should be computable with a small routine. Divide the bit string to be remembered into eight bit hunks. Employ a simple program that reads several thousand words of some of your favorite text in your favorite language. Hash each word in that text and sort by hash. Here is the yield from Twain’s “Tom Sawyer”. The program then takes each eight bit hunk in turn and presents you with a list of words that hash to that hunk. You choose a word from each list as a phrase by which to remember the number. A clever program would further sort words by noun, verb and adjective making it easier to produce sentences.

Now a very simple program with no data base, but merely using the simple hash, can translate your sentence into the original bit string.

I propose the following hash where ui16 is an unsigned 16 bit number and uchar is an unsigned character:

#include <ctype.h>
uchar hash(char * ch){
  ui16 h = 0;
  while (isalpha(*ch)) 
    h = 41*h + (tolower(*(ch++)) - 'a');
  return h;}

There is a drawback. With the fixed set of words it is possible to do error correction, especially of spoken material. The above scheme suffers with soundalikes such as “to”, “two”, “too”, which can be disambiguated only in a redundant grammatical context.