https://beersupply.uk/cryptography-tutorial-4/