首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加解密多次

加解密多次
EN

Stack Overflow用户
提问于 2018-02-25 14:12:49
回答 1查看 690关注 0票数 0

我正在尝试使用Python2.7进行密码学。我可以加解密一次文本。但是当我在循环中多次尝试加密-解密时,它不会返回变量p中的原始字符串。请查看我的代码,并建议可以做些什么。谢谢!

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-25 21:10:44

先声明: Python不是我的强项,但是,我已经有一段时间没有回答任何问题了,所以为什么不呢?

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

首先--为什么?使用相同的密钥并不会让加密变得更好。

第二,它的工作方式不是这样的。我很确定这与加密和解密对象是有状态的并且不能重用的事实有关。更详细的This SO post describes it

但是,两个小的改变将使它(某种程度上)工作,因为你会得到原始的源代码。

代码语言:javascript
复制
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

代码语言:javascript
复制
for i in range(2):
    dec = AES.new(k, AES.MODE_CBC, IV)   ## and this line too
    p = dec.decrypt(p)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48970768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档