for p in range(16): cph_guess[b*16+p] = chr(ord(cph[b*16+p]) ^ ord(block_guess[p])) print_msg( "cph_guess after xor with block: %s" % repr(cph_guess[b*16:b*16+16])) for p in range(pos-1,16): print_msg( "Padding byte: %s with value: %s" % (b*16+p+1, 17-pos)) cph_guess[b*16+p] = chr(ord(cph_guess[b*16+p]) ^ (17 - pos)) print_msg( "cph_guess after xor with pad byte: %s" % repr(cph_guess[b*16:b*16+16])) if decrypt_and_check_pad(a, "".join(cph_guess)): print_msg( "Valid!!!") return block else: print_msg( "Not valid padding") return block decrypted_msg = "" for i in range(len(cph)/16): block = ["\x00"] decrypted_block = decrypt_block(aes, cph, block, 1, 0) print "\nDecrypted a block!\n" print repr(decrypted_block) decrypted_msg = "".join(decrypted_block) + decrypted_msg cph = cph[:-16] print aes.pkcs7chk(decrypted_msg)