Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
erika-n committed Jun 7, 2023
0 parents commit a9abacc
Show file tree
Hide file tree
Showing 33 changed files with 990 additions and 0 deletions.
64 changes: 64 additions & 0 deletions 6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
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
Binary file added __pycache__/b64.cpython-310-pytest-7.1.2.pyc
Binary file not shown.
Binary file added __pycache__/b64.cpython-310.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added __pycache__/english_letter_freq.cpython-310.pyc
Binary file not shown.
Binary file not shown.
Binary file added __pycache__/hamming_distance.cpython-310.pyc
Binary file not shown.
Binary file added __pycache__/hex_to_byte_array.cpython-310.pyc
Binary file not shown.
Binary file added __pycache__/test_b64.cpython-310-pytest-7.1.2.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added __pycache__/xor_encryption.cpython-310.pyc
Binary file not shown.
14 changes: 14 additions & 0 deletions b64.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import base64

def b64_to_bytes(b64_str):
ascii_bytes = b64_str.encode("ascii")
return base64.b64decode(ascii_bytes)


def bytes_to_b64(bytearr):
return base64.b64encode(bytearr).decode("ascii")


if __name__ == "__main__":
b = b64_to_bytes("BAAA")
print(b)
37 changes: 37 additions & 0 deletions challenge_1_b64.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@


# Convert hexadecimal string to base 64 string
def hex_to_b64(hexstr):
hextable = "0123456789abcdef"

pad = len(hexstr) % 3
if pad == 1:
hexstr = "00" + hexstr
elif pad == 2:
hexstr = "0" + hexstr


b64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
b64str = ""

for i in range(0, len(hexstr), 3):
n = 0
mul = 1
for j in range(2, -1, -1):
single_hex = hextable.index(hexstr[i + j])
n += single_hex*mul
mul = mul << 4
# now that we have 3 hex characters together, that is 2 base64 characters
char2 = b64_table[n % 64]
n = n // 64
char1 = b64_table[n % 64]
b64str += char1 + char2
return b64str


def test_hex_to_b64():
hex = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d"
ans = "SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t"
val = hex_to_b64(hex)
assert val == ans, f"{val=}"

4 changes: 4 additions & 0 deletions challenge_2_xor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
n1 = 0x1c0111001f010100061a024b53535009181c
n2 = 0x686974207468652062756c6c277320657965

print(hex(n1 ^ n2))
64 changes: 64 additions & 0 deletions challenge_3_xor_cipher.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@

with open("letter_frequency.csv") as f:
freqs = f.readlines()

english_freqs = {line.split(",")[0]:float(line.strip().split(",")[1]) for line in freqs[1:]}

cipher = 0x1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736


def to_ascii(hex_num):
ascii = ""
while hex_num > 0:

ascii += chr(hex_num % 2**8)

hex_num = hex_num >> 8
return ascii[::-1]

def list_to_num(lst, bits):
num = 0
mul = 1
for item in lst[::-1]:

num += item*mul
mul = mul << bits

return num

def letter_freq_score(text):
score = 0
text = text.lower()
my_freqs = {}
for character in text:
my_freqs[character] = my_freqs.get(character, 0) + 1

for key in my_freqs.keys():
my_freqs[key] /= len(text)

for key in my_freqs.keys():
if key in english_freqs:
score += my_freqs[key]*english_freqs[key]

return score

output = []

for i in range(26*2 + 6):
letter = ord("A") + i
letters = [letter] * 34

key = list_to_num(letters, 8)

text = to_ascii(cipher^key)
score = letter_freq_score(text)
output.append((chr(letter), text, score))

output = sorted(output, key=lambda x: x[2], reverse=True)
for o in output[:5]:
print(o)





73 changes: 73 additions & 0 deletions challenge_4_detect_xor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@


with open("letter_frequency.csv") as f:
freqs = f.readlines()

english_freqs = {line.split(",")[0]:float(line.strip().split(",")[1]) for line in freqs[1:]}


with open("challenge_4_encrypted.txt") as f:
ciphers = f.read().splitlines()

def to_ascii(num):
ascii = ""
while num > 0:

ascii += chr(num % 2**8)

num = num >> 8
return ascii[::-1]

def list_to_num(lst, bits):
num = 0
mul = 1
for item in lst[::-1]:

num += item*mul
mul = mul << bits

return num

def letter_freq_score(text):


score = 0
text = text.lower()
my_freqs = {}
for character in text:
my_freqs[character] = my_freqs.get(character, 0) + 1

for key in my_freqs.keys():
my_freqs[key] /= len(text)

for key in my_freqs.keys():
if key in english_freqs:
score += my_freqs[key]*english_freqs[key]

return score

output = []
for cipher in ciphers:
n_chars = len(cipher)//2
n_cipher = int(cipher, 16)

for i in range(256):
letter = i
letters = [letter] * n_chars

key = list_to_num(letters, 8)

text = to_ascii(n_cipher^key)
score = letter_freq_score(text)
output.append((cipher, chr(letter), text, score))

output = sorted(output, key=lambda x: x[3], reverse=True)
for o in output[:5]:
print(o)

# Answer:
# ('7b5a4215415d544115415d5015455447414c155c46155f4058455c5b523f', '5', 'Now that the party is jumping\n', 0.066741)




Loading

0 comments on commit a9abacc

Please sign in to comment.