One-time pad (OTP)
onetimepad_cipher.py
#one_time_pad cipher #type of Vignere cipher, including the following features: #1) unbreakable (random, auto-generated) #2) key is made up of random symbols #3) key used one time and thrown away plain_text = "THISISSECRET" OTP_key = "XVHEUWNOPGDZ" plain_chars = list(plain_text) OTP_chars = list(OTP_key) # to encrypt: encrypted_chars = [] for i, char in enumerate(OTP_chars): #ord("A")=65, so A means shift 0, #B means shift 1, etc: shift_amount = ord(char) - ord("A") plain_char_ord = ord(plain_chars[i]) - ord("A") #find out new char ord: new_char_ord = plain_char_ord + shift_amount #if the new char ord > 26, then wrap around to 0 (Z to A): new_char_ord = new_char_ord % 26 #revert back to correct character ordinals: encrypted_chars.append(chr(new_char_ord+ord("A"))) cipher_text = "".join(encrypted_chars) print(cipher_text)