def test_challenge7(self): expected = b"I'm back and I'm ringin" if 7 not in self.tests: self.skipTest("") key = b"YELLOW SUBMARINE" with open("materials\\7.txt") as f: _input = Base64(f.read()) _input = from_base64(_input) actual = decrypt_aes_128_ecb(_input, key) self.assertEqual(actual[:len(expected)], expected)
def test_from_base64(self): if "base64" not in self.tests: self.skipTest("") test_input = Base64( "SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t") answer = Hex( "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d" ) output = to_hex(from_base64(test_input)) self.assertEqual(output, answer)
def test_challenge6(self): if 6 not in self.tests: self.skipTest("") expected_output = b'Terminator X: Bring the noise' with open("materials\\6.txt") as f: _input = Base64(f.read()) _input = from_base64(_input) result = break_repeating_xor(_input) self.assertEqual(result, expected_output)
def test_challenge10(self): if 10 not in self.tests: self.skipTest("") key = b"YELLOW SUBMARINE" with open("materials\\10.txt") as f: _input = Base64(f.read()) _input = from_base64(_input) actual = decrypt_cbc(_input, key) expected = b"I'm back and I'm ringin'" self.assertEqual(expected, actual[:len(expected)])
def encrypt_random_string(bs: int = 16, teststring: str = None) -> bytes: iv = generate_bytes() # noinspection PyTypeChecker strings: List[Base64] = ["MDAwMDAwTm93IHRoYXQgdGhlIHBhcnR5IGlzIGp1bXBpbmc=", "MDAwMDAxV2l0aCB0aGUgYmFzcyBraWNrZWQgaW4gYW5kIHRoZSBWZWdhJ3MgYXJlIHB1bXBpbic=", "MDAwMDAyUXVpY2sgdG8gdGhlIHBvaW50LCB0byB0aGUgcG9pbnQsIG5vIGZha2luZw==", "MDAwMDAzQ29va2luZyBNQydzIGxpa2UgYSBwb3VuZCBvZiBiYWNvbg==", "MDAwMDA0QnVybmluZyAnZW0sIGlmIHlvdSBhaW4ndCBxdWljayBhbmQgbmltYmxl", "MDAwMDA1SSBnbyBjcmF6eSB3aGVuIEkgaGVhciBhIGN5bWJhbA==", "MDAwMDA2QW5kIGEgaGlnaCBoYXQgd2l0aCBhIHNvdXBlZCB1cCB0ZW1wbw==", "MDAwMDA3SSdtIG9uIGEgcm9sbCwgaXQncyB0aW1lIHRvIGdvIHNvbG8=", "MDAwMDA4b2xsaW4nIGluIG15IGZpdmUgcG9pbnQgb2g=", "MDAwMDA5aXRoIG15IHJhZy10b3AgZG93biBzbyBteSBoYWlyIGNhbiBibG93"] rand_string = from_base64(choice(strings)) if teststring: rand_string = teststring return iv + encrypt_cbc(rand_string, fixkey, iv, bs)
from typing import Callable from ch01 import from_base64, Base64 from ch07 import encrypt_aes_128_ecb from ch09 import pkcs7_pad from ch10 import strip_padding from ch11 import generate_bytes, ecb_or_cbc unknown_string = from_base64(Base64("""Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkg aGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBq dXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUg YnkK""")) key = generate_bytes() def encryption_oracle_ecb(data: bytes) -> bytes: global key data = pkcs7_pad(data + unknown_string) return encrypt_aes_128_ecb(data, key) # needs a rewrite def find_block_size(func: Callable[[bytes], bytes]): return len(func(b"A")) def crack_ecb_simple(func: Callable[[bytes], bytes], left_base_size: int = 0) -> bytes: # block_size = find_block_size(func) # wrong block_size = 16 answer = [] base_byte = b"A"