|
@@ -4,6 +4,7 @@ from copy import deepcopy
|
|
|
import logging
|
|
|
import random
|
|
|
from functools import reduce
|
|
|
+import sys
|
|
|
|
|
|
class Encoding:
|
|
|
''' Encoding Enum '''
|
|
@@ -168,12 +169,13 @@ class PaddingOracle(object):
|
|
|
|
|
|
if first_run:
|
|
|
real_padding = pt_block[byte_index]
|
|
|
- print('')
|
|
|
first_run = False
|
|
|
|
|
|
it_block[byte_index] = guess ^ padding
|
|
|
logging.debug("[~] correct padding [{0}] with byte [{1}]\n\t-> it_byte = {0} ^ {1} = {3}\n\t-> pt_byte = it_byte ^ {2} = {4}\n".format(hex(padding),\
|
|
|
hex(guess), hex(orig_pre_ct[byte_index]), hex(it_block[byte_index]),hex(pt_block[byte_index])))
|
|
|
+
|
|
|
+
|
|
|
logging.debug("[+] Plaintext Block: {}".format(pt_block))
|
|
|
break
|
|
|
|
|
@@ -287,6 +289,9 @@ class PaddingOracle(object):
|
|
|
}
|
|
|
logging.basicConfig(format='%(message)s', level=levels.get(level, logging.INFO))
|
|
|
|
|
|
+ def decrypt_block_at_index(self, index):
|
|
|
+ logging.info("[+] Decrypting block at index %d" % index)
|
|
|
+ self.crack_block(index)
|
|
|
|
|
|
'''
|
|
|
crack all blocks of the ciphertext (except first one)
|
|
@@ -298,9 +303,10 @@ class PaddingOracle(object):
|
|
|
|
|
|
num_blocks = len(self.blocks)
|
|
|
pt_blocks = []
|
|
|
- logging.info("[*] decrypting all %d blocks" % num_blocks)
|
|
|
+ logging.info("[+] Decrypting all %d blocks" % num_blocks)
|
|
|
+
|
|
|
for idx in range(num_blocks, 1, -1):
|
|
|
- logging.info("\n-----[ decrypting block %d ]-----\n" %(idx))
|
|
|
+ logging.info("[*] Decrypting block %d" %(idx))
|
|
|
it_block, pt_block = self.crack_last_block(local_blocks[:idx])
|
|
|
pt_blocks.append(pt_block)
|
|
|
local_blocks = deepcopy(orig_blocks)
|