Пример #1
0
def main(encrypt, input_file, output_file, block_cipher_mode, key_length):

    if encrypt:

        key = aes.random_key_generator(int(key_length))

        if key_length == "128":
            AES = aes.AES(key, 128)

        elif key_length == "192":
            AES = aes.AES(key, 192)

        elif key_length == "256":
            AES = aes.AES(key, 256)

        if block_cipher_mode == "ECB":
            bcm = aes.ECB(AES)

        elif block_cipher_mode == "CBC":
            bcm = aes.CBC(AES, 16)

        elif block_cipher_mode == "CTR":
            bcm = aes.CTR(AES)

        bcm.cipher(input_file, output_file)
        print("Cipher Key:", key)
        write_key(key)

    else:
        key = read_key()
        if key == 1:
            print("File key.txt doesn't exists! Can't decrypt without key")
            exit(1)

        key_length = len(key) * 4

        if key_length == 128:
            AES = aes.AES(key, 128)

        elif key_length == 192:
            AES = aes.AES(key, 192)

        elif key_length == 256:
            AES = aes.AES(key, 256)

        else:
            print("Key length not valid!")
            exit(1)

        if block_cipher_mode == "ECB":
            bcm = aes.ECB(AES)

        elif block_cipher_mode == "CBC":
            bcm = aes.CBC(AES, 16)

        elif block_cipher_mode == "CTR":
            bcm = aes.CTR(AES)

        bcm.decipher(input_file, output_file)
Пример #2
0
def padding_oracle(data):
    iv = data[:BLOCKSIZE]
    ct = data[BLOCKSIZE:]
    c = aes.CBC(KEY, iv)
    try:
        c.decrypt(ct)
        return True
    except ValueError:
        return False
Пример #3
0
 def test_challenge_10_cbc(self):
     with open('10.txt') as f:
         data = b64decode(f.read())
     c = aes.CBC(KEY, b'\x00' * 16)
     self.assertEqual(c.decrypt(data), PLAINTEXT)
Пример #4
0
def encrypt():
    plain = random.choice(PLAINTEXTS)
    iv = os.urandom(BLOCKSIZE)
    c = aes.CBC(KEY, iv)
    return iv + c.encrypt(pkcs7pad(plain, BLOCKSIZE))
Пример #5
0
 def test_challenge_10_twoway(self):
     e = aes.CBC(KEY, b'\x00' * 16)
     d = aes.CBC(KEY, b'\x00' * 16)
     x = e.encrypt(b"foobar" * 123)
     self.assertEqual(d.decrypt(x), b'foobar' * 123)