How to beat a substitution cipher when adding a pseudo-random number stream?
Phil Zimmermann here.  Yes, it was modulo addition of bytes from the pseudorandom number generator, and subtraction at the receiver end.  Essentially a stream cipher.  The fatal weakness was that I used a linear congruential generator, seeded by the key.  As weak as an LFSR.  I knew nothing at that time about the weakness of linear generators.  It was 1973.  I was clueless.  There were no crypto courses available in the university in that era.

This was not the last time I attempted home-grown crypto algorithms.  Later, in PGP version 1.0, I developed my own block cipher design called Bassomatic, a cautionary story I have told elsewhere.  From this humiliating experience I learned to only use extensively peer-reviewed algorithms.

-prz