CS Unplugged has a lesson that uses simple graphs to enable by-hand encryption and decryption of integers with public and private keys. The activity includes a couple of key pairs, and I found that giving everyone the same keys led to confusion about what public and private keys really mean and how to use them. I wrote a script to generate random handouts of arbitrary complexity so I can give a distinct handout to each student, and scale the difficulty based on the group’s experience.

I generated three sets of 30 handouts in three levels of difficulty, and you can generate your own with the code on GitHub. Examples embedded below.

An example handout.
An example private key.