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;}