【问题标题】:Encrypting-Decrypting multiple times加密-解密多次
【发布时间】:2018-08-04 20:42:05
【问题描述】:

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

【问题讨论】:

  • 那么,结果有什么问题?
  • 您的问题描述没有帮助。你到底在期待什么?你到底得到了什么?
  • 问题是解密后我无法得到原始字符串 p (='enigmaticaura')。也相应地编辑了问题。
  • 请使用答案旁边的复选标记表示问题已解决

标签: python python-2.7 encryption cryptography pycrypto


【解决方案1】:

首先免责声明: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)

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

【讨论】:

  • 成功了。非常感谢! :) 虽然,我不太确定它为什么起作用。 enc/dec 变量没有改变,因此为下一次迭代再次重新定义它们没有意义。我想使用 .encrypt/.decrypt 方法可能是原因。
  • @harsh-kolhatkar 这就是重点 - enc/dec 变量 在内部发生了变化。它们保持内部状态并且不能被重用。通过重新创建它们,您实际上是在重置它们。
猜你喜欢
  • 2020-04-23
  • 2021-06-25
  • 1970-01-01
  • 2010-10-10
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
相关资源
最近更新 更多