Original answer below:
Please show us some sample input and output for an example. Based on your code, I can come up with the following – random.shuffle
shuffles everything in place and returns None
, change your makeKey to:
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
EDIT 2:
For an approach without using dict
s in encryption/decryption, see below:
import random
alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' # Note the space at the end, which I kept missing.
# You could generate the key below using makeKey (i.e. key=makeKey(alphabet))
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm'
plaintext = "Hey, this is really fun!"
# v! zmhvxdmxdmo!nll mikbg
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
def encrypt(plaintext, key, alphabet):
keyIndices = [alphabet.index(k.lower()) for k in plaintext]
return ''.join(key[keyIndex] for keyIndex in keyIndices)
def decrypt(cipher, key, alphabet):
keyIndices = [key.index(k) for k in cipher]
return ''.join(alphabet[keyIndex] for keyIndex in keyIndices)
cipher = encrypt(plaintext, key, alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
Prints:
Hey, this is really fun!
v! zmhvxdmxdmo!nll mikbg
hey, this is really fun!
EDIT:
After some spacing issues and experimentation, I came up with this rather simple solution:
import random
alphabet = 'abcdefghijklmnopqrstuvwxyz.,! '
key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm'
plaintext = "Hey, this is really fun!"
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
def encrypt(plaintext, key, alphabet):
keyMap = dict(zip(alphabet, key))
return ''.join(keyMap.get(c.lower(), c) for c in plaintext)
def decrypt(cipher, key, alphabet):
keyMap = dict(zip(key, alphabet))
return ''.join(keyMap.get(c.lower(), c) for c in cipher)
cipher = encrypt(plaintext, key, alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
This prints:
Hey, this is really fun!
v! zmhvxdmxdmo!nll mikbg
hey, this is really fun!