我正在尝试使用Python2.7进行密码学。我可以加解密一次文本。但是当我在循环中多次尝试加密-解密时,它不会返回变量p中的原始字符串。请查看我的代码,并建议可以做些什么。谢谢!
import os, random
from Crypto.Cipher import AES
from Crypto.Hash import SHA256
'''Encryption'''
k = 'mykey'
hasher = SHA256.new(k)
k = hasher.digest()
p = 'enigmaticaura'
print p
IV = ''
lp = len(p)
for i in range(16):
IV += chr(random.randint(0,0xFF))
if len(p)%16 != 0:
p += ' '*(16 - len(p)%16)
enc = AES.new(k, AES.MODE_CBC, IV)
for i in range(2):
p = enc.encrypt(p)
print p
'''Decryption'''
dec = AES.new(k, AES.MODE_CBC, IV)
for i in range(2):
p = dec.decrypt(p)
#p = p[:lp]
print p发布于 2018-02-25 21:10:44
先声明: Python不是我的强项,但是,我已经有一段时间没有回答任何问题了,所以为什么不呢?
我猜你的问题应该是“为什么解密没有产生原始输入”。
首先--为什么?使用相同的密钥并不会让加密变得更好。
第二,它的工作方式不是这样的。我很确定这与加密和解密对象是有状态的并且不能重用的事实有关。更详细的This SO post describes it。
但是,两个小的改变将使它(某种程度上)工作,因为你会得到原始的源代码。
for i in range(2):
enc = AES.new(k, AES.MODE_CBC, IV) ## move this line inside the loop
p = enc.encrypt(p)
print p和
for i in range(2):
dec = AES.new(k, AES.MODE_CBC, IV) ## and this line too
p = dec.decrypt(p)这可能是,也可能不是你所希望的。
https://stackoverflow.com/questions/48970768
复制相似问题