Esempio n. 1
0
		new_size = len(aes.ecb_encrypt(msg))

		if new_size > size:
			break
	return size

data = b64decode('Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkgaGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBqdXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUgYnkK')
key = generate_key()

a = AESCipher(key)
bs = determine_block_size(a)
print "Block size: %s" % bs
known_data = ""
char_dict = {}

for i in range(1, 176):
	short_str = "A" * (bs-i) + known_data	

	for j in range(256):
		str = short_str + known_data + chr(j)
		char_dict[str] = a.ecb_encrypt(str)

	enc = short_str + data[:i]
	msg = a.ecb_encrypt(enc)
	for k,v in char_dict.iteritems():
		if v == msg:
			known_data += k[-1]

print known_data
	
Esempio n. 2
0
	dupe_count = find_duplicate_blocks(data)
	if dupe_count > 2:
		return 2
	elif dupe_count == 0:
		return 1
	else:
		return -1

success = 0
fail = 0
msg = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"

for i in range(200):
	enc_msg = generate_jibber_jabber(msg)
	mode = randint(1,2)
	if mode == 1:
		a = AESCipher(key=generate_key(), bs=16, iv=generate_key())
		enc = a.cbc_encrypt(enc_msg)
	elif mode == 2:
		a = AESCipher(key=generate_key(), bs=16, iv=generate_key())
		enc = a.ecb_encrypt(enc_msg)

	computed_mode = encryption_oracle(enc)

	if mode == computed_mode:
		success += 1
	else:
		fail += 1

print "Success rate: %.3f" % float(float(success)/float((success + fail)))