我创建了一个函数,它使用加密。密码
:
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?
只需指定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