示例#1
0
def cbc_encrypt(text, key, iv):
    ''' CBC encrypt text with initialization vector iv and key '''
    block_length = len(iv)
    text = pkcs_padding(text, block_length)
    blocks = util.blocks(text, block_length)
    blocks[0] = util.string_xor(blocks[0], iv)
    blocks[0] = util.ecb_encrypt(blocks[0], key)

    for i in xrange(1, len(blocks)):
        blocks[i] = util.string_xor(blocks[i], blocks[i - 1])
        blocks[i] = util.ecb_encrypt(blocks[i], key)

    return ''.join(blocks)
def cbc_encrypt(text, key, iv):
    ''' CBC encrypt text with initialization vector iv and key '''
    block_length = len(iv)
    text = pkcs_padding(text, block_length)
    blocks = util.blocks(text, block_length)

    blocks[0] = util.string_xor(blocks[0], iv)
    blocks[0] = util.ecb_encrypt(blocks[0], key)

    for i in xrange(1, len(blocks)):
        blocks[i] = util.string_xor(blocks[i], blocks[i-1])
        blocks[i] = util.ecb_encrypt(blocks[i], key)

    return ''.join(blocks)
示例#3
0
def random_aes(text):
    ''' Encrypt text with AES 128 ECB with a chosen random key
        Random key is chosen once per code invocation
    '''
    padding = b64decode(unknown_string)           #base64
    if 'key' not in random_aes.func_dict:
        random_aes.key = random_string(16)
    key = random_aes.key

    return ecb_encrypt(text + padding, key)     # 加上padding加密
示例#4
0
def encryption_oracle(data):
    prepad = Random.get_random_bytes(random.choice(range(5, 11)))
    postpad = Random.get_random_bytes(random.choice(range(5, 11)))
    padded = pkcs7_pad(prepad + data + postpad)
    key = keygen()
    if random.choice(range(2)) == 0:
        iv = keygen()
        return cbc_encrypt(data, key, iv)
    else:
        return ecb_encrypt(data, key)
def random_aes(text):
    ''' Encrypt text with AES 128 ECB with a chosen random key
        Random key is chosen once per code invocation
    '''
    padding = b64decode(unknown_string)
    if 'key' not in random_aes.func_dict:
        random_aes.key = random_string(16) 
        random_aes.prefix = random_string(random.randint(0, 100)) 
    key = random_aes.key
    prefix = random_aes.prefix

    return ecb_encrypt(prefix + text + padding, key) 
def ctr_decrypt(text, key='YELLOW SUBMARINE', nonce=0):
    ''' CTR decrypt a text using key and nonce '''
    block_size = len(key)
    blocks = util.get_blocks(text, block_size)

    c = Counter()
    decrypted = ''
    for block in blocks:
        keystring = util.ecb_encrypt(c.next(), key)
        decrypted += util.string_xor(keystring, block)

    return decrypted
def encryption_oracle(text):
    # Append some random bytes both ways
    text = random_string(random.randint(5, 10)) + text + random_string(random.randint(5, 10))

    iv = random_string(16)
    key = random_string(16)

    if random.randint(0, 1):
        # ECB
        return util.ecb_encrypt(text, key) 
    else:
        # CBC
        return cbc_encrypt(text, key, iv)
示例#8
0
def encryption_oracle(text):
    # Append some random bytes both ways
    text = random_string(random.randint(5, 10)) + text + random_string(
        random.randint(5, 10))
    iv = random_string(16)  #16bits
    key = random_string(16)

    if random.randint(0, 1):
        # ECB
        return util.ecb_encrypt(text, key)
    else:
        # CBC
        return cbc_encrypt(text, key, iv)
示例#9
0
def encryption_oracle(text):
    # 明文两侧添加随机密文
    text = random_string(random.randint(5, 10)) + text + random_string(
        random.randint(5, 10))

    iv = random_string(16)
    key = random_string(16)

    if random.randint(0, 1):
        # ECB
        return util.ecb_encrypt(text, key)
    else:
        # CBC
        return cbc_encrypt(text, key, iv)
示例#10
0
 def encrypt(self, email):
     ''' Encrypt user profile with AES 128 ECB with a chosen random key
         Random key is chosen once per code invocation
     '''
     key = self.key
     return ecb_encrypt(self.profile_for(email), self.key)
 def encrypt(self, email):
     ''' Encrypt user profile with AES 128 ECB with a chosen random key
         Random key is chosen once per code invocation
     '''
     key = self.key
     return ecb_encrypt(self.profile_for(email), self.key)