SAMPLE_FREQUENCIES = get_character_frequencies(sample_text)
+def encrypt_with_repeating_xor(plaintext, key):
+ plaintext_bytes = plaintext.encode('utf-8')
+ key_bytes = key.encode('utf-8')
+
+ return xor_bytes(
+ plaintext_bytes,
+ (key_bytes * ((len(plaintext_bytes) // len(key_bytes)) + 1))[:len(plaintext_bytes)],
+ )
+
class Set1Challenge1Tests(unittest.TestCase):
def test_converts_hex_to_base64(self):
expected = 'SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t\n'
self.assertEqual(expected, actual)
+class Set1Challenge5Tests(unittest.TestCase):
+ def test_encrypts_with_repeating_xor(self):
+ plaintext = "Burning 'em, if you ain't quick and nimble\nI go crazy when I hear a cymbal"
+ key = 'ICE'
+
+ expected = '0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d63343c2a26226324272765272a282b2f20430a652e2c652a3124333a653e2b2027630c692b20283165286326302e27282f'
+ actual = encrypt_with_repeating_xor(plaintext, key).hex()
+
+ self.assertEqual(expected, actual)
+
if __name__ == '__main__':
unittest.main()