Kenneth_Rosen 2024-03-31 20:59 采纳率: 0%
浏览 29

AttributeError: module 'Crypto.Cipher.DES' has no attribute 'new'

AttributeError: module 'Crypto.Cipher.DES' has no attribute 'new'

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-31 20:59
    关注

    引自免费微信小程序:皆我百晓生

    在Python中,Crypto.Cipher.DES.new() 函数用于创建一个新的密钥对,它基于DES算法,并返回一个字典类型的新对象,其中包含明文和密文。但是,由于Python的PEP 517标准限制了模块导入的顺序,通常情况下,在导入并定义Crypto.Cipher.DES后,再尝试调用new()函数会导致AttributeError

    为了解决这个问题,我们需要确保我们在使用Crypto.Cipher.DES之前已经正确导入了Crypto模块。以下是相应的解决步骤:

    1. 首先,导入所需的库:
    import Crypto
    
    1. 然后,从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)
    

    在上述示例中,plaintextciphertext分别表示要加密和解密的数据。

    对于这两种情况,如果你想要创建新的密钥对并对其进行加密或解密,可以按照上述步骤执行:

    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加密的模块(如PyAESpycryptodome)中查找相关信息,并遵循它们提供的初始化和加密/解密操作示例。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月31日

悬赏问题

  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,
  • ¥15 spaceclaim模型变灰色
  • ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
  • ¥15 就很莫名其妙,本来正常的Excel,突然变成了这种一格一页
  • ¥15 字符串比较代码的漏洞
  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?