From fad38387af3b6a5ed0d8f3042e2ac0a6ceabf45a Mon Sep 17 00:00:00 2001 From: William Carroll Date: Tue, 4 Jan 2022 12:44:59 -0800 Subject: feat(wpcarro/cryptopals): Support repeating key cipher I think this is a form of symmetric encryption where the passphrase (e.g. "ICE") is repeated (e.g. "ICEICEICEICEI...") until it matches the length of the cleartext string; after that, the two byte-strings are XOR'd against one another and then encoded as hexadecimal creating the ciphertext. Change-Id: Ib148f06d6c42a41377d1df1f0738d77da935a9f6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/4789 Tested-by: BuildkiteCI Reviewed-by: wpcarro Autosubmit: wpcarro --- users/wpcarro/scratch/cryptopals/set1/c5.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 users/wpcarro/scratch/cryptopals/set1/c5.py (limited to 'users/wpcarro/scratch') diff --git a/users/wpcarro/scratch/cryptopals/set1/c5.py b/users/wpcarro/scratch/cryptopals/set1/c5.py new file mode 100644 index 000000000000..a098dfe74afa --- /dev/null +++ b/users/wpcarro/scratch/cryptopals/set1/c5.py @@ -0,0 +1,16 @@ +def encrypt_repeating_key(x, key): + result = b"" + for i in range(len(x)): + b = ord(x[i]) ^ ord(key[i % len(key)]) + result += b.to_bytes(1, 'big') + return result.hex() + +cleartext = "Burning 'em, if you ain't quick and nimble\nI go crazy when I hear a cymbal" +expected = "0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f" + +run_tests = False +if run_tests: + ciphertext = encrypt_repeating_key(cleartext, "ICE") + print(ciphertext) + assert ciphertext == expected + print("Success!") -- cgit 1.4.1