about summary refs log tree commit diff
path: root/users/wpcarro/scratch/cryptopals/set1/c3.py
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2021-12-29T16·11-0400
committerclbot <clbot@tvl.fyi>2021-12-29T19·34+0000
commit4cf86f2e53881e473d881072e55b21179e4dd593 (patch)
tree0ea98356ffbb3dfe2f4abbd44317b2a5c81d6ea0 /users/wpcarro/scratch/cryptopals/set1/c3.py
parent5c0ec720afc83761d1afda44e9b6acd30375d898 (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.py28
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"))