Example #1
0
 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)
Example #2
0
 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)
Example #3
0
    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)
Example #4
0
    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)])
Example #5
0
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)
Example #6
0
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"