コード例 #1
0
ファイル: challenge16.py プロジェクト: ritobanrc/cryptopals
def build_profile(userdata):
    plaintext = ('comment1=cooking%20MCs;userdata=' + quote(userdata) +
                 ';comment2=%20like%20a%20pound%20of%20bacon')
    plaintext = bytearray(plaintext, encoding='utf-8')
    plaintext = pkcs7padding(plaintext)
    ciphertext = aes_cbc_encrypt(plaintext, random_key, random_iv)
    return ciphertext
コード例 #2
0
ファイル: challenge11.py プロジェクト: ritobanrc/cryptopals
def encrypt_random(plaintext):
    bytes_to_add = random.randint(5, 10)
    plaintext = challenge9.pkcs7padding(
        random_string(bytes_to_add) + plaintext + random_string(bytes_to_add))
    ecb = random.randint(0, 1)
    if ecb:
        aes = AES.new(random_string(16))
        ciphertext = aes.encrypt(plaintext)
    else:
        ciphertext = challenge10.aes_cbc_encrypt(plaintext, random_string(16),
                                                 random_string(16))
    return ciphertext, (ecb == 1)
コード例 #3
0
def encryption_oracle(input):
    random_key = os.urandom(16)
    modified_input = os.urandom(randrange(5,11)) + input + os.urandom(randrange(5,11))
    encrypted = bytearray()
    if randrange(0,2) == 1:
        # do cbc
        iv = os.urandom(16)
        encrypted = aes_cbc_encrypt(modified_input, random_key, iv)
    else:
        #do ecb
        encrypted = encrypt_block(pad(modified_input), random_key)
    return bytearray(encrypted)
コード例 #4
0
def f1(s):
    # quote out ; and = in s
    s = s.replace(';', '";"')
    s = s.replace('=', '"="')

    res = PREPEND + s + APPEND

    # pad
    res_padded = pkcs7_pad(res, BLK_SZ)

    # encrypt under random AES key
    k = gen_aes_key()
    iv = secrets.token_bytes(BLK_SZ)

    res_enc = aes_cbc_encrypt(res_padded, k, iv)

    return k, res_enc, iv
コード例 #5
0
ファイル: challenge11.py プロジェクト: danielcazar/cryptopals
def encryption_oracle(pt):
    """
    For the input @pt, pads it with 5-10 bytes on both sides, then encrypts it
    with either AES in ECB mode or AES in CBC mode with equal probability. The
    key and IV are randomly generated 16-byte strings.
    """

    key = rand_bytes(16)
    iv = rand_bytes(16) # In case the mode is CBC. Generate this before
                        # choosing the mode to protect against timing attacks.
    padded_pt = rand_bytes_range(5, 10) + pt + rand_bytes_range(5, 10)
    if random.randint(0, 1) == 0:
        # print True # Uncomment to check the oracle detector
        return aes_ecb_encrypt(key, padded_pt)
    else:
        # print False # Uncomment to check the oracle detector
        return aes_cbc_encrypt(key, padded_pt, iv)
コード例 #6
0
def encryption_oracle(x):
    if type(x) == str:
        x = bytearray(x, "utf-8")
    bytes_append_len = 5 + secrets.randbelow(6)
    bytes_prepend_len = 5 + secrets.randbelow(6)

    bytes_appended = bytearray(secrets.token_bytes(bytes_append_len))
    bytes_prepended = bytearray(secrets.token_bytes(bytes_prepend_len))

    pt = pkcs7_pad(bytes_prepended + x + bytes_appended, 16)

    encryption_scheme = secrets.randbelow(2)

    if (encryption_scheme == ECB_MODE):
        # do ECB
        ct = encrypt_aes_ecb(pt, gen_aes_key())
    elif (encryption_scheme == CBC_MODE):
        # do CBC
        ct = aes_cbc_encrypt(pt, gen_aes_key(), secrets.token_bytes(BLK_SZ))

    return ct, encryption_scheme
コード例 #7
0
ファイル: challenge17.py プロジェクト: ritobanrc/cryptopals
def encrypt_cbc_random():
    plaintext = binascii.a2b_base64(random.choice(possible_b64_plaintexts))
    iv = random_string(AES.block_size)
    return aes_cbc_encrypt(plaintext, random_key, iv), iv
コード例 #8
0
 def encrypt(self, pt):
     return aes_cbc_encrypt(self.__key, self.PREFIX + pt + self.SUFFIX,
                            self.__iv)