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

16字节无填充的AES加密

公西俊民
2023-03-14

这应该是一个简单的问题,但我无法从openssl文档中找到任何示例或答案。

我想加密128位,应该适合一个加密块。

所以我调用EVP_EncyptInit_ex,然后呢?

我是否调用EVP_EncryptUpdate_ex加密 128 位块)和EVP_EncryptFinal_ex(即使没有更多要加密的内容)?

还是只有EVP_EncryptUpdate_ex?还是只有EVP_EncryptFinal_ex

共有2个答案

丁兴德
2023-03-14

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() 设置上下文进行加密或解密后调用此函数。

所以你的步骤是:

    < li >调用< code>EVP_CIPHER_CTX_new来创建上下文 < li >使用上下文调用< code>EVP_EncryptInit_ex < li >在上下文中调用< code > EVP _ CIPHER _ CTX _ set _ padding < li >调用< code > EVP _ encrypt update _ ex 来加密数据 < li >调用< code>EVP_EncryptFinal_ex来检索密文

另请参阅 OpenSSL wiki 上的 EVP 对称加密和解密。

诸葛砚文
2023-03-14

在这里,你已经搞清楚了步骤。所以,它会是

  1. EVP_加密Init_ex
  2. EVP_EncryptUpdate_ex
  3. EVP_EncryptFinal_ex

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