Python 多次加密解密

Python 多次加密解密,python,python-2.7,encryption,cryptography,pycrypto,Python,Python 2.7,Encryption,Cryptography,Pycrypto,我正在尝试使用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 = 'enig

我正在尝试使用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

免责声明:Python并不是我的强项,但嘿,我已经有一段时间没有回答任何问题了,为什么不

我猜你的问题应该是“为什么解密不产生原始输入”

首先,为什么?使用相同的密钥并不能真正使加密变得更好

而对于两个人来说,这并不是为了这样工作。我很确定这是因为加密和解密对象是有状态的,不能重用。更详细地说

但是,两个小的改变将使它(某种程度上)工作,只要你能找回原始的源代码

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


这可能是,也可能不是您所希望的。

那么,结果有什么问题?您的问题描述没有帮助。你到底在期待什么?你到底得到了什么?问题是解密后我无法得到原始字符串p('Enigmaticura')。也相应地编辑了问题。请使用答案旁边的复选标记表示问题已解决。非常感谢!:)尽管如此,我不太清楚为什么它会起作用。enc/dec变量没有改变,因此为下一次迭代重新定义它们是没有意义的。我想使用.encrypt/.decrypt方法可能是原因。@harsh kolhatkar这就是问题所在-enc/dec变量在内部被修改。它们保持内部状态,不能重用。通过重新创建它们,实际上就是重置它们。
for i in range(2):
    dec = AES.new(k, AES.MODE_CBC, IV)   ## and this line too
    p = dec.decrypt(p)