AttributeError: module 'Crypto.Cipher.DES' has no attribute 'new'
4条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在Python中,
Crypto.Cipher.DES.new()函数用于创建一个新的密钥对,它基于DES算法,并返回一个字典类型的新对象,其中包含明文和密文。但是,由于Python的PEP 517标准限制了模块导入的顺序,通常情况下,在导入并定义Crypto.Cipher.DES后,再尝试调用new()函数会导致AttributeError。为了解决这个问题,我们需要确保我们在使用
Crypto.Cipher.DES之前已经正确导入了Crypto模块。以下是相应的解决步骤:- 首先,导入所需的库:
import Crypto- 然后,从
Crypto.Cipher模块导入我们要操作的类,即DES类:
from Crypto.Cipher import DES这里我们没有指定具体的操作是创建一个新的密钥对还是加密/解密数据,因此我们可以选择两种情况进行讨论。
a. 创建新密钥对:
cipher = DES.new(key)在这个例子中,
key参数是你要使用的密钥,你可以将其存储在一个变量中,例如:key = b'SecretKey1234'b. 加密/解密数据:
plaintext = b'Sixteen-bit plaintext to encrypt' ciphertext = cipher.encrypt(plaintext)在上述示例中,
plaintext和ciphertext分别表示要加密和解密的数据。对于这两种情况,如果你想要创建新的密钥对并对其进行加密或解密,可以按照上述步骤执行:
new_cipher = DES.new(key) encrypted_data = new_cipher.encrypt(plaintext) decrypted_data = new_cipher.decrypt(ciphertext) # 你可以根据实际情况替换 `plaintext` 和 `ciphertext` 到具体的加密或解密操作。具体代码实现如下:
-
如果你想创建新的密钥对并对其进行加密(如果key是一个字符串):
new_cipher = DES.new(key.encode()) encoded_plaintext = new_cipher.encrypt(plaintext.encode()) encryption_result = new_cipher.encrypt(encoded_plaintext) print(f"Encrypted text: {encryption_result.decode('utf-8')}") -
如果你想创建新的密钥对并对其进行解密(如果key是一个字典):
new_cipher = DES.new(key.encode()) decrypted_data = new_cipher.decrypt(ciphertext.encode()) decryption_result = new_cipher.decrypt(decrypted_data.encode()) print(f"Decrypted text: {decryption_result.decode('utf-8')}")
注意:在Python中,
new()函数返回的是字典类型的新对象,其键是加密或解密前原始数据中的每个字段,而值则是对应的明文或密文数据。如果你想获取密文,可以通过字典的keys()属性访问,例如:print(new_cipher.keys()) # Output: ['data']如果你在运行上述代码时遇到其他错误或不确定的情况,例如试图实例化一个不存在的类或方法、尝试在非
Cryptography模块中导入DES等,也可能会引发同样的AttributeError异常。在这种情况下,你需要查看相关文档或在其他已知支持Python AES/DES加密的模块(如PyAES或pycryptodome)中查找相关信息,并遵循它们提供的初始化和加密/解密操作示例。解决 无用评论 打赏 举报 编辑记录