我试图在DES中实现padding oracle攻击。我对CBC解密过程的理解(或者至少是我在课堂上被告知的)是:
假设我们的密文只有两个块,C0和C1。然后,解密过程与C1进行C0异或,然后解密。然后,oracle检查填充并返回True或False。
我的问题是关于异或,我不理解如何在python中对两个字符串值进行异或(我对这一切都很新)。
所以如果我有值:
C0 = 'f20bdba6ff29eed7'
C1 = '58b1ffb4210a580'
我如何对两者进行异或,以便我能看到oracle是否正在返回正确的值?
编辑:我已尝试过代码:how to do bitwise exclusive or of two strings in python?
但我得到了一个奇怪的输出,这就是为什么我发布了一个单独的问题。任何帮助将不胜感激
答案 0 :(得分:1)
查看字符串,看起来它是hex
个数字的字符串。首先将其转换为int
,执行XOR
并将其重新转换为hex
,如下所示:
>>> C0 = 'f20bdba6ff29eed7'
>>> C1 = '58b1ffb4210a580'
>>> str(hex(int(C0,16) ^ int(C1,16)))[2:]
'f780c45dbd394b57L'
我不确定Oracle Padding Attack是什么,但它是执行XOR
的方式。