45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
import argparse
|
|
|
|
|
|
def caesar(ptextletter, keyletter):
|
|
ptextNum = ord(ptextletter) - ord('A')
|
|
keyletterNum = ord(keyletter) - ord('A')
|
|
return chr((ptextNum + keyletterNum) % 26 + ord('A'))
|
|
|
|
|
|
def caesar_reverse(ptextletter, keyletter):
|
|
ptextNum = ord(ptextletter) - ord('A')
|
|
keyletterNum = ord(keyletter) - ord('A')
|
|
return chr((ptextNum - keyletterNum) % 26 + ord('A'))
|
|
|
|
def encryption(plaintext, key):
|
|
ciphertext = ''
|
|
for i in range(len(plaintext)):
|
|
ciphertext += caesar(plaintext[i], key[i % len(key)])
|
|
return ciphertext
|
|
|
|
|
|
def decryption(ciphertext, key):
|
|
plaintext = ''
|
|
for i in range(len(ciphertext)):
|
|
plaintext += caesar_reverse(ciphertext[i], key[i % len(key)])
|
|
return plaintext
|
|
|
|
|
|
def main():
|
|
# parse command line argument
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--text', type=str)
|
|
parser.add_argument('--key', type=str)
|
|
args = parser.parse_args()
|
|
|
|
key = args.key
|
|
user_text = args.text
|
|
|
|
print("Ciphertext: " + encryption(user_text, key))
|
|
print("Decrypted plaintext: " + decryption(user_text, key))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|