当前位置: 首页 > 知识库问答 >
问题:

AES加密的问题。不能用右键解密

夏侯承恩
2023-03-14

我在解密加密数据。使用pycryptodome库,采用AES CBC模式对数据进行加密。有这样的错误-“valueerror:不正确的AES密钥长度(256字节)

import os
from Crypto import Random
from Crypto.Cipher import AES

class AESCipher:
    def __init__(self, key):
        pass

    def pad(self, s):
        return s + b"\0" * (AES.block_size - len(s) % AES.block_size)

    def encrypt(self, message, key, key_size=256):
        message = self.pad(message)
        iv = Random.new().read(AES.block_size)
        cipher = AES.new(key, AES.MODE_CBC, iv)
        return iv + cipher.encrypt(message)

    def decrypt(self, ciphertext, key):
        iv = ciphertext[:AES.block_size]
        cipher = AES.new(key, AES.MODE_CBC, iv)
        plaintext = cipher.decrypt(ciphertext[AES.block_size:])
        return plaintext.rstrip(b"\0")

def send_data(data)
    key = os.urandom(16)
    cipher = AESCipher(key)
    ciphertext = cipher.encrypt(data, key)
    return key, ciphertext

def receive_data(key, data):
    cipher = AESCipher(key)
    decrypted = cipher.decrypt(data, key)
    return decrypted

data = b'12 43 42 46 af'
key, ciphertext = send_data(data)
decrypted = receive_data(key, data)

共有1个答案

黎玺
2023-03-14

我认为您要解密的是密码文本,而不是原始数据(未加密):

decrypted = receive_data(key, ciphertext)
 类似资料:
  • 我试图在Android和PHP端使用AES加密/解密数据,并累犯空答案。 首先,我在Android中生成了对称密钥: 在服务器端,我试图解密数据。我可以解密(从RSA)秘密的AES密钥,并得到它的字符串表示。在客户端(Android)和服务器端(PHP)上是一样的。但是如何使用这个字符串AES密钥来解密数据呢?我尝试了这个(PHP): PHP中的结果: 怎么啦?

  • 问题内容: 我迅速编写了一个应用程序,我需要AES加密和解密功能,我从另一个.Net解决方案中接收了加密数据,但是我找不到解决办法。 这是我的.net加密: 我需要迅速解密功能。 问题答案: 我找到了解决方案,它是一个很好的库。 跨平台256位AES加密/解密。 此项目包含在所有平台(C#,iOS,Android)上均可使用的256位AES加密的实现。关键目标之一是通过简单的实现使AES在所有平台

  • 问题内容: 我找到了在PHP中对字符串进行编码/解码的示例。起初它看起来非常好,但是不会起作用:-( 有人知道问题出在哪里吗? 结果是: 加密: 解密: 问题答案: 并且 在您的代码中未定义。查看有效的解决方案( 但不安全! ): 停! 这个例子是 不安全的! 不要使用它! **但是此代码中还有其他问题,使其变得不安全,尤其是使用ECB(这不是_加密_模式,只能在其上定义加密模式的构造块)。

  • 我在这个网站上用AES-256加密一个虚拟字符串: https://www.devglan.com/online-tools/aes-encryption-decryption 具有以下参数: null 当我尝试用OpenSSL从命令行解密它时: 我得到这个错误:

  • 我的德尔福应用程序使用 TurboPower 密码箱 3 使用 AES 256 加密纯文本信息。我现在想使用PHP解密这些信息。但是涡轮增压锁盒3有一些互操作性问题。 有关详细信息,请查看LockBox 3作者的帖子: http://lock box . seanbdurkin . id . au/tiki-view _ forum _ thread . PHP?comments_parentId

  • 我之所以问这个问题,是因为两天来我读了很多关于crypto AES加密的帖子,就在我以为我得到了它的时候,我意识到我根本没有得到它。 这个帖子是最接近我的问题,我有完全相同的问题,但它没有得到回答: CryptoJS AES加密与JAVA AES解密值不匹配 我得到的是已经加密的字符串(我得到的代码只是为了看看他们是怎么做的),所以修改加密方式不是一个选项。这就是为什么所有类似的问题对我来说都不是

  • 我正在使用以下函数通过Qt中的OpenSSL库加密我的数据: “源”在“123456789012345678901234567890123456789012ABC”中。 “密码”为“1HA!DH==SJAH48S8AK!?SKIITFI120XX”。 所以...如果我正确的话,那么EVP_BytesToKey()应该从密码中生成一个密钥,并提供数据以在后面解密字符串。 对base64编码的密钥是:

  • 我面临AES填充问题。我使用的是Alcides Soares FIlho(用C#生成128位字符串)中建议的代码。请注意,我的加密侧码是。。。 另外,我传递给明文的值是“Z4YAZZSQ 001F295E2589AWAN HANS”。加密正在进行。但解密失败了。 解密侧码 我应该能拿回“Z4YAZZSQ 001F295E2589AWAN HANS” 但出现以下错误“填充无效,无法删除”请建议解决方