好的,所以这是我的代码到目前为止:
import os
import time
import random
import Crypto
from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Cipher import AES
import base64
key = 'MIICWwIBAAKBgQDN'
print('do you have a encrypted string in a file?')
fileexist = input('if so then input 1:')
if fileexist == 1:
filename = raw_input('please input path to file:')
file = open(filename,'r')
encoded = file.read()
type = type(encoded)
else:
encoded = raw_input('please enter encrypted text')
encoded = str(encoded)
BLOCK_SIZE = 16
PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
decoded = DecodeAES(key, encoded)
print(decoded)
我继续在第24行上设置属性错误,我的确切错误消息如下所示
AttributeError: 'str' object has no attribute 'decrpt'
我正在尝试使用AES解密邮件。我的加密器使用几乎完全相同的语法工作得很好。我不完全理解错误的原因。我知道这是可能的,我已经看到使用这种语法的其他帖子。
答案 0 :(得分:1)
预留拼写问题,在您链接的代码中,DecodeAES
的第一个参数是使用AES.AESCipher
创建的AES.new
对象:
# create a cipher object using the random secret
cipher = AES.new(secret)
在您自己的代码中,您传递的字符串key
没有decrypt
方法。
而且FWIW这与被定义为lambda的函数无关 - 函数版本的行为方式完全相同:
def DecodeAES(c, e):
return c.decrypt(base64.b64decode(e)).rstrip(PADDING)
DecodeAES("foo", "bar")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in DecodeAES
AttributeError: 'str' object has no attribute 'decrypt'
答案 1 :(得分:1)
首先需要创建一个AES对象来传递DecodeAES。
使用
进行key = 'MIICWwIBAAKBgQDN'
cipher = AES.new(key)
现在,不是在DecodeAES
上调用key
,而是在我们使用cipher
创建的key
对象上调用它:
decoded = DecodeAES(cipher, encoded)
这应该可以使您的代码正常工作。