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

时间:2014-06-05 17:17:42

标签: c openssl rsa sha

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

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

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

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

1 个答案:

答案 0 :(得分:4)

您可以使用RSA_sign使用SHA256哈希对数据进行签名。你可以这个叫

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

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

由于您有.p12个文件,因此需要执行以下操作。

PKCS12文件创建.p12结构。

PKCS12 * p12 = d2i_PKCS12_fp(fp_to_p12_file, NULL);

p12结构解析为证书和密钥。

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

它将为EVP_PKEY结构提供RSA结构,使用EVP_PKEY_get1_RSA或访问evp_pkey->pkey.rsa结构成员。

这应该可以帮助你开始。