我需要一些帮助,使用 OpenSSL 来使用 C(Windows 和 Linux)生成数据块的签名。该应用程序与谷歌身份验证有关。谷歌文档中的说明是:
“使用 SHA256withRSA(也称为带有 SHA-256 哈希函数的 RSASSA-PKCS1-V1_5-SIGN)以及从 Google 开发者控制台获取的私钥对输入的 UTF-8 表示形式进行签名。输出将是一个字节数组。 ”
私钥是一个包含 1660 字节二进制数据的 .p12 文件。
我是否使用 RSA_sign() API 来实现此目的?如果是这样,我应该先对数据进行哈希处理吗?使用什么键值?我假设 RSA * 参数应该保存私钥?它是如何加载的?我已经使用 HMAC 函数生成 SHA 哈希,但我在这里有点迷失 - 任何帮助或示例代码将不胜感激。(是的,我知道谷歌有库可以做到这一点,但没有用于我需要使用的 C 语言的库)。
您可以使用RSA_signSHA256 哈希对数据进行签名。你可以这样称呼
RSA_sign(NID_sha256, digest, digest_len, &sign_buffer, sign_len, rsa_key);
Run Code Online (Sandbox Code Playgroud)
您已将数据的 SHA256 哈希值计算到digest缓冲区中。rsa_key应该初始化。
由于您有.p12文件,因此您需要执行以下操作。
PKCS12从文件创建结构.p12。
PKCS12 * p12 = d2i_PKCS12_fp(fp_to_p12_file, NULL);
Run Code Online (Sandbox Code Playgroud)
将结构解析p12为证书和密钥。
PKCS12_parse(p12, passphrase, &evp_pkey, &x509_cert, NULL);
Run Code Online (Sandbox Code Playgroud)
它将提供EVP_PKEY结构,您可以从中获取RSA结构EVP_PKEY_get1_RSA或访问evp_pkey->pkey.rsa结构的成员。
这应该可以帮助您开始。
| 归档时间: |
|
| 查看次数: |
8464 次 |
| 最近记录: |