c - 如何在 C 中使用 OpenSSL 生成 RSA SHA 签名

标签 c openssl rsa sha

我需要一些帮助来使用 OpenSSL 使用 C(Windows 和 Linux)生成数据 block 的签名。该应用程序与谷歌身份验证有关。 Google 文档中的说明是:

“使用 SHA256withRSA(也称为 RSASSA-PKCS1-V1_5-SIGN)对输入的 UTF-8 表示进行签名 使用 SHA-256 哈希函数)和从 Google Developers Console 获得的私钥。这 输出将是一个字节数组。”

私钥是一个包含1660字节二进制数据的.p12文件。

我是否为此使用 RSA_sign() API?如果是这样,我应该先散列数据吗?用什么 核心值(value)?我假设 RSA * 参数应该保存私钥?它是如何得到的 加载?我已经使用 HMAC 函数生成 SHA 哈希,但我在这里有点迷路了 - 任何帮助 或示例代码将不胜感激。 (是的,我知道谷歌有库可以做到这一点,但没有 对于 C,我需要使用)。

最佳答案

您可以使用 RSA_sign 通过 SHA256 哈希对数据进行签名。你可以这样称呼

RSA_sign(NID_sha256, digest, digest_len, &sign_buffer, sign_len, rsa_key);

您已将数据的 SHA256 哈希值计算到 digest 缓冲区中。 rsa_key 应该被初始化。

因为您有 .p12 文件,您需要执行以下操作。

.p12 文件创建 PKCS12 结构。

PKCS12 * p12 = d2i_PKCS12_fp(fp_to_p12_file, NULL);

p12结构解析为证书和 key 。

PKCS12_parse(p12, passphrase, &evp_pkey, &x509_cert, NULL);

它将提供 EVP_PKEY 结构,您可以使用 EVP_PKEY_get1_RSA 从中获取 RSA 结构或访问 evp_pkey->pkey.rsa 结构的成员。

这应该可以帮助您开始。

关于c - 如何在 C 中使用 OpenSSL 生成 RSA SHA 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066318/

相关文章:

c - 如何在 C 中不访问此变量?

c - OpenAES/OpenSSL 兼容性

c - 我正在使用 RSA 算法的源代码。它编译正确,没有错误,但输出不正确

php - openssl:如何从模数中获取公钥

c++ - Linux IPC实现猜测

c - Linux:当父进程退出时退出 fork 的子进程

rust - 无法安装 cargo wasm-pack

java - RSA填充解密问题(聊天应用)

c - 使用 gdb 进行事后内存泄漏搜索(和分析)

java - iPhone推送证书的问题