这应该是一个简单的问题,但我无法从openssl文档中找到任何示例或答案。
我想加密128位,应该适合一个加密块。
所以我调用EVP_EncyptInit_ex
,然后呢?
我是否调用EVP_EncryptUpdate_ex
(加密 128 位块)和EVP_EncryptFinal_ex
(即使没有更多要加密的内容)?
还是只有EVP_EncryptUpdate_ex
?还是只有EVP_EncryptFinal_ex
?
16html" target="_blank">字节无填充的AES加密
使用EVP_*
接口并禁用块上的填充。
使用EVP_*
接口,因为它支持引擎和硬件加速,如AES-NI。AES_encrypt
函数是基于软件的,不支持替代实现。此外,它不容易明显,但AES_encrypt
不是可移植的——一些平台遇到了序列问题。
您需要调用EVP_CIPHER_CTX_set_padding
以确保没有添加填充。从EVP_CIPHER_CTX_set_padding(3)
手册页:
EVP_CIPHER_CTX_set_padding() 启用或禁用填充。默认情况下,加密操作使用标准块填充进行填充,并在解密时检查并删除填充。如果 pad 参数为零,则不执行填充,加密或解密的数据总量必须是块大小的倍数,否则将发生错误。应在使用 EVP_EncryptInit_ex() 设置上下文进行加密或解密后调用此函数。
所以你的步骤是:
另请参阅 OpenSSL wiki 上的 EVP 对称加密和解密。
在这里,你已经搞清楚了步骤。所以,它会是
EVP_EncryptFinal_ex
还要注意数据不是块长度的倍数。
在我看来,如果你只能使用没有填充的AES(EVP _ interfaces负责填充),那么就选择< code>AES_encrypt。
它们相当易于使用。
//Step 1: Set encrypt key.
AES_KEY aeskey;
AES_set_encrypt_key(key, bits, &aeskey);
//Step2: Encrypt exactly 128 bits.
AES_encrypt(data, dataout, &aeskey);
我正在尝试将java代码转换为NodeJs代码。这有点复杂,因为定制的格式包括密码和salt。 在main方法中有一个例子。 以下是我的java代码: 我正在尝试下面这样的JS代码,但不知道我做错了什么: 它抛出一个错误: 谢谢
我对我当前尝试访问的API的加密有以下要求: < li>PKCS7填充方法 < li>CBC加密模式 < li>AES密钥大小256,块大小128 每次我提交带有加密的API时,API似乎都有问题(不幸的是没有产生错误)。 问题: PKCS7填充方法到底是什么,可以用php实现? AES 256很好,但是块大小到底是什么意思? IV到底是做什么的?
我面临AES填充问题。我使用的是Alcides Soares FIlho(用C#生成128位字符串)中建议的代码。请注意,我的加密侧码是。。。 另外,我传递给明文的值是“Z4YAZZSQ 001F295E2589AWAN HANS”。加密正在进行。但解密失败了。 解密侧码 我应该能拿回“Z4YAZZSQ 001F295E2589AWAN HANS” 但出现以下错误“填充无效,无法删除”请建议解决方
我正在尝试将aes-128-cbc加密与openssl一起使用,我希望密钥需要32位。但是,我注意到当我输入密钥长度为18时,openssl不会给我错误。 但是,如果我在密钥后添加0,直到它是32位,我仍然会得到相同的结果。 有文档说OpenSSL给键添加了填充吗? 编辑:我需要在代码中重现此行为。我得到了密钥,但不能保证密钥是多少位数。
如果公司营业额大于50亿卢比,GST理事会已批准将企业对企业(B2B)发票的“电子发票”或“电子发票”实施到GST系统。参考商品及服务税门户 API :einv-apisandbox.nic.in/index.html 我必须使用APP密钥对加密的SEK进行解密,并使用解密的SEK对json数据进行编码,以便发布Einvoice Generation,我找到了java和C#的示例代码,我已经用PH