问题标签 [evp-cipher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
138 浏览

openssl - 带有自定义引擎 openssl 的 RSA

我希望使用自定义引擎运行此(URL)代码:https ://sehermitage.web.fc2.com/program/src/rsa_evp.c

我想用引擎实现以下功能。

如何使用自定义引擎注册这些功能?我没有找到任何 ENGINE_set_*** 类型的函数来注册相应的函数。谁能指导我如何进行此操作。

0 投票
1 回答
108 浏览

openssl - 打印 EVP_PKEY_CTX 结构的值时出错

在测试仪方面,我正在尝试打印结构 evp_pkey_ctx_st 的值,但在取消引用指向不完整类型 EVP_PKEY_CTX 的指针时出现错误。

任何人都可以请指导我。这是一种可行的方法吗?我们可以在引擎或测试器端打印结构值吗?

0 投票
1 回答
407 浏览

c++ - 将文件读取为 unsigned char* 以在 C++ 中使用 openssl 进行加密

据我所见,openssl 中的 EVP 功能仅接受unsigned char *作为输入。一个示例代码是:

我想打开/读取任何类型的文件并将其用作纯文本来加密它。这样的代码如何使我能够读取任何类型的文件?

尝试时,我总是以初始化错误告终:

是否还有其他库也支持 aead 或 openssl funktion 更足以完成此任务?

我得到的错误信息是:

另外代码必须是c++,不能使用c。

0 投票
1 回答
362 浏览

c++ - Openssl EVP“EVP_CTRL_GCM_GET_TAG”失败

我在 C++ 中使用 Openssl EVP。不知何故获取标签失败。我的代码:

但为什么?所有其他的 EVP 功能都做得很好。我想念什么?我必须调用其他功能吗?而不是标签,@\267* 被写入 tag.txt 文件。

0 投票
0 回答
68 浏览

encryption - Openssl EVP 的 HMAC 验证出错

我编写的代码以某种方式无法正常工作。当通过在线工具使用相同的密钥和密码时,hmac 是不同的。

我的代码是:

我的代码计算出来的hmac是:eadfb51c9fb3f3fcd5741006861d04bc0d695347db4bfb9e04e954e17583c3c5。

online-tool计算的hmac为:a9e0f9acc1452bdb796556c3c64e29d7f7ab47a59a179ec918c61894eefeba26。

我究竟做错了什么?

0 投票
1 回答
776 浏览

c++ - 如何使用openssl EVP解密?

我正在尝试使用 C 解密文件(但我可以更改为 C++),但我不知道如何正确使用 EVP 库。

我要复制的控制台命令是:

我使用 EVP 的实际 C 代码是:

我想这不起作用,因为我必须声明一些东西来使用 SHA1 而不是 SHA256(rc2-ecb 上的默认值),但我不知道该怎么做。

任何帮助将不胜感激

0 投票
1 回答
79 浏览

c - C加密逻辑与java不匹配

我正在寻找以下 java 代码的等效 C 代码。我正在尝试编写两个应用程序,一个在 java 中,另一个在 C 中。Java 应用程序使用以下逻辑加密/解密“字符串”,并且在使用以下 java 方法时它正在工作。

我从上面的 JAVA 代码中了解到的是:

对于加密:

  1. 我们使用 HMAC-sha256 来生成“key”,它需要“salt”、“password”。
  2. 填充输入数据。
  3. 我们使用 AES-CBC-256 加密填充的输入数据,使用上面生成的“key”和“iv”。
  4. 我们使用 base64 对加密数据进行编码。

解密:

  1. 我们使用 HMAC-sha256 来生成“key”,它需要“salt”、“password”。
  2. 我们使用 base64 解码并获取加密数据。
  3. 我们使用 AES-CBC-256 来解密加密数据,使用上面生成的密钥和 iv。
  4. 修剪解密的数据。

为了在 C 中复制相同的内容,我使用了下面链接中的加密/解密方法; EVP对称加解密

为了生成密钥,我使用“PKCS5_PBKDF2_HMAC”和 EVP_MD 作为“EVP_sha256()”。

对于 base64 编码/解码: base64 编码/解码

我还处理了填充和修剪逻辑。但是我从 java 和 c 代码中得到了不同的加密数据。我在这里错过了什么吗?

如果您在 C 中有任何示例函数,那将非常有帮助。

0 投票
1 回答
151 浏览

c - 如何使用 OpenSSL EVP API 中的密钥索引加密/解密?

我的系统包括一个硬件安全模块(HSM),它将对称/非对称密钥导入其内部存储器,然后为外部用户提供密钥索引以供将来使用(加密/解密)。

我现在正在为此 HSM 编写一个 OpenSSL 引擎,预计应用程序将通过 OpenSSL EVP API 调用该引擎。

应用程序级代码(用 C 语言)通过 EVP API 函数调用加密服务(例如,通过存储在 HSM 中的用户密码加密某些内容)的正确方法是什么,只需在参数中提供密钥索引,而不是密钥本身?

我知道 EVP 和引擎 API 为开发人员提供了一些“控制功能”,但它们似乎用于命令行参数。我想知道在库使用中使用它们传递键索引是否是正确的方法。

更新:

我现在正在尝试使用EVP_CIPHER中的ctrl函数将密钥导入 HSM。

我想知道哪个更好,在“init_ex”步骤(在EVP_CIPHER->init中调用ctrl)或在“do_cipher”步骤中(使用EVP_CIPHER_CTX_set_app_data在 do_cipher 之前将密钥传递给app_data,然后在 do_cipher 中调用ctrl)?

0 投票
1 回答
20 浏览

encryption - 有没有办法在 openssl v1.1.0 或更高版本中设置不透明结构的成员?

我正在重组旧代码以与 OpenSSL 1.1.1 兼容,在从 1.0.2 -> 1.1.1 升级 OpenSSL 期间,多个结构变得不透明并且不再可能直接访问成员。

我需要将 EVP_CIPHER_CTX 的 buf_len 设置为 0。有没有办法做到这一点?

0 投票
0 回答
230 浏览

c++ - C++ 中的 OpenSSL 加密/解密命令行

你能告诉我用于加密文件的命令行 OpenSSL 命令的 C++ 等效项是什么吗?

openssl enc -nosalt -aes-256-cbc -kfile c:\temp\key -in c:\temp\binary.png -out c:\temp\binary.enc

并再次解密该文件:

openssl enc -nosalt -aes-256-cbc -kfile c:\temp\key -d -in c:\temp\binary.enc -out c:\tmp\binary.png

上面的两行都在命令行上工作,但在 c++ 中不行,我试过这个:

我从 C++ 代码中获得了一个加密文件,但是当我尝试通过命令行对其进行解密时,我得到: