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

更改AES加密的默认长度倍数[重复]

锺离自明
2023-03-14

我创建了一个函数,它使用加密。密码

    import os
    from Crypto.Cipher import AES

    def encrypt_pass(user_entered_plaintext):
        encrypt_setup = AES.new(os.urandom(32), AES.MODE_CBC, os.urandom(16))
        plaintext = user_entered_plaintext
        ciphertext = encrypt_setup.encrypt(plaintext)

        print(ciphertext)
        return ciphertext

如果我试着运行这个,比如:

encrypt_pass('Test')

我得到这个错误:

ValueError: Input strings must be a multiple of 16 in length

如果我尝试改变:

encrypt_setup = AES.new(os.urandom(32), AES.MODE_CBC, os.urandom(16))

encrypt_setup = AES.new(os.urandom(32), AES.MODE_CBC, os.urandom(8))

我得到:

ValueError: IV must be 16 bytes long

如何将此输入字符串最小值强制为8?

共有1个答案

慕高阳
2023-03-14

只需指定PKCS#7填充。你将不得不在加密之前添加它,并在解密后删除它,因为写pycrypto的笨蛋没有添加填充作为选项。(我认为PHP mcrypt是坏的!)请参阅CodeTalk链接。

AES加密基于块,块大小为16字节,因此如果输入数据不是块大小的倍数,则必须添加填充。

在第二次尝试中,您将iv更改为8字节,但它必须是16字节的块大小。

但是您没有保存密钥或iv,因此以后无法解密数据。您需要为它们使用变量。

 类似资料:
  • 我使用mysql aes加密和解密如下: 我读到AES支持128 192和256。我假设默认值是128是正确的吗?因此,鉴于上述查询没有定义密钥长度,它会以默认密钥长度加密和解密吗? 如果是这样,在上面的查询中指定密钥长度会更好吗?因为例如:假设我使用默认值128加密和存储数据,但后来设置更改,256变为默认值,那么这意味着它将无法解密数据,对吗?有没有办法在上面的查询中定义密钥长度? 另外,我用

  • 我正在学习ssl通信的基础知识,尤其是AES加密。我读了OpenSSL代码,看到了一个名为< code>userkey的指针。 在文件"aes_core. c"中 > 从何而来?它是如何生成的? 我想知道不同版本AES的的实际大小。 256 位版本为 256 / 8 = 32,192 为 24,128 为 16?我有点迷茫。 如果长度是可变的,那么我应该如何为那些符合长度要求的输入创建一个安全的输

  • 我被要求为安全类实现AES算法。在实现过程中,我找不到答案,我如何从用户那里接受像密码这样的任意长度的密钥,并将其转换为128、192或256位密钥。我该怎么办?

  • 我想制作一个脚本来解密我的文件,但当我尝试运行脚本并向我显示此消息时,如何修复它? Traceback(最近一次调用):File"F:\bug_bounty\decrypt.py",第46行,在File"F:\bug_bounty\decrypt.py",第24行,在decrypt File"C:\Python27\lib\site-包\Crypto\Cipher\blockalgo.py",行_

  • 从我的安全团队,他们希望我使用AES256密钥强度和CBC模式。我的代码只有当我输入长度为32个字母的输入明文时才起作用,现在我将输入明文改为256 CBC,块大小改为128。 如果我输入“这是一个测试”(不是32个字符长),我会收到: 系统安全密码学。加密异常:输入数据不是完整的块。 如果我输入:“ABCDEFGHIJKLMNOPQRSTUVWXYZ000000”,就行了! 我需要什么代码来使这

  • 我使用密码加密和解密字节数组在Android发送到服务器。我没有使用字符串,但我仍然收到非法块大小异常。 2021-08-12 20:55:17.606 15222-15222/com.example.packageW/System.err:javax.crypto.IllegalBlockSizeExcture:错误:1e00006a:密码函数:OPENSSL_internal:DATA_NOT