我需要一些帮助来使用 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/