我需要一些帮助,使用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,我需要使用)。
答案 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
结构成员。
这应该可以帮助你开始。