【发布时间】:2020-10-30 13:31:42
【问题描述】:
我正在尝试解密 AES CBC 字符串的解密次数。 第一次解密成功。
from Crypto.Cipher import AES
k = '57067125438768260656188878670043'
key = bytes(k, 'ascii')
i = '5706712543876826'
iv = bytes(i, 'ascii')
dec = AES.new(key, AES.MODE_CBC, iv)
n = 2
cipher = 'dd3364461dbca39ddb5eb32e9f11b81f000acac9ce8b91369f8bf7e4a88787785a8cc498c85ea20370e68f0e7014e92a2b5aedd4c670ec172d7adb45dfa5a770b582e8ed255bb857d94afdfd6e579525f24890070f984b8862133eda9cbb118ba7880db125c32dea7e7c54bc77abfc02'
def unpad(s):
return s[:-ord(s[len(s)-1:])]
def decrypt(cipherId):
cipher = bytes.fromhex(cipherId)
id = dec.decrypt(cipher)
node_dec = unpad(id.decode('utf-8'))
print (node_dec)
return node_dec
这是加密的第一阶段,但我不知道如何设置循环以根据n再次运行该函数。例如,这个密码被加密了两次,可能是三个或四个或更多。
我创建了另一个函数来解密解密函数的输出,因为输出提供了不同的编解码器。
def decrypt_again(cipherId):
cipher = bytes.fromhex(cipherId)
id = dec.decrypt(cipher)
node_dec = unpad(id.decode('ISO-8859-1'))
print (node_dec)
return node_dec
所以我试着写这个循环
x = decrypt(cipher)
for i in range (n):
y = decrypt_again(x)
但它只适用于n = 1,如果n大于1,它只是不断重复y而不是再次解析它。
请问我该怎么办?
如果我重新运行该函数两次,字符串会出现问题,我得到ó³*Ä'»g)X»#¾ú84-8089-be57330fcd45 而不是这个a214868d-f40b-4184-8089-be57330fcd45,编解码器似乎有中断
为什么会这样?
【问题讨论】:
-
请记住,您正在重用具有内部状态的
dec实例。如果您遇到使用相同配置多次加密明文的挑战,那么您不得重复使用 AES 实例,而是在每次迭代中使用相同的 IV 对其进行初始化。 -
谢谢。成功了,你可以看看我的答案
标签: python encryption cryptography aes python-3.6