diff options
author | William Carroll <wpcarro@gmail.com> | 2021-12-29T16·11-0400 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2021-12-29T19·34+0000 |
commit | 4cf86f2e53881e473d881072e55b21179e4dd593 (patch) | |
tree | 0ea98356ffbb3dfe2f4abbd44317b2a5c81d6ea0 /users/wpcarro/scratch/cryptopals/set1/c3.py | |
parent | 5c0ec720afc83761d1afda44e9b6acd30375d898 (diff) |
feat(wpcarro/scratch): Upload my solutions to cryptopals r/3501
More beginner problems/solutions for CTF-style challenges. Change-Id: Ide229e99e3ccc1ede5a5ca1c2ad039498e49ea4c Reviewed-on: https://cl.tvl.fyi/c/depot/+/4740 Reviewed-by: wpcarro <wpcarro@gmail.com> Autosubmit: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI
Diffstat (limited to 'users/wpcarro/scratch/cryptopals/set1/c3.py')
-rw-r--r-- | users/wpcarro/scratch/cryptopals/set1/c3.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/users/wpcarro/scratch/cryptopals/set1/c3.py b/users/wpcarro/scratch/cryptopals/set1/c3.py new file mode 100644 index 000000000000..187b58c1c70a --- /dev/null +++ b/users/wpcarro/scratch/cryptopals/set1/c3.py @@ -0,0 +1,28 @@ +from c2 import fixed_xor +from collections import Counter +import string + +alphabet = string.ascii_lowercase + string.ascii_uppercase + +def score(bs): + chars = [b for b in bs if b in alphabet] + return sum(Counter(chars).values()) + +def decode_cipher(x): + x = bytearray.fromhex(x) + num_bytes = len(x) + + mx, result, key = 0, None, None + for c in alphabet: + mask = bytearray(bytes(c, 'ascii') * num_bytes) + y = fixed_xor(x, mask, decode_hex=False, encode_hex=False).decode('ascii') + test = score(y) + if test > mx: + result = y + mx = test + key = mask.decode('ascii') + return result + +run_tests = False +if run_tests: + print(decode_cipher("1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736")) |