多次加解密
Encrypting-Decrypting multiple times
我正在使用 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 并不是我的强项,但是嘿,我已经有一段时间没有回答任何问题了,所以为什么不...
我猜你的问题应该是 "why doesn't the decryption produce the original input".
一方面 - 为什么?使用相同的密钥并不会真正使加密变得更好。
对于两个人来说 - 它并不意味着那样工作。我很确定这与加密和解密对象是有状态的并且不能被重用这一事实有关。 更详细。
但是,只需进行两个小的更改就可以(在某种程度上)发挥作用,只要您能恢复原始来源即可。
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)
这可能是您所希望的,也可能不是。
我正在使用 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 并不是我的强项,但是嘿,我已经有一段时间没有回答任何问题了,所以为什么不...
我猜你的问题应该是 "why doesn't the decryption produce the original input".
一方面 - 为什么?使用相同的密钥并不会真正使加密变得更好。
对于两个人来说 - 它并不意味着那样工作。我很确定这与加密和解密对象是有状态的并且不能被重用这一事实有关。
但是,只需进行两个小的更改就可以(在某种程度上)发挥作用,只要您能恢复原始来源即可。
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)
这可能是您所希望的,也可能不是。