如何在C中使用OpenSSL生成RSA SHA签名
我需要一些使用OpenSSL的帮助,以便使用C(Windows和Linux)生成数据块的签名。该应用程序与谷歌认证有关。谷歌文档中的说明如下: “使用SHA256withRSA(也称为RSASSA-PKCS1-V1_5-Sign)对输入的UTF-8表示进行签名 使用SHA-256散列函数)和从Google开发者控制台获得的私钥 输出将是一个字节数组。“ 私钥是一个包含1660字节二进制数据的.p12文件 我是否使用RSA_sign()API来实现这一点?如果是这样,我应该先散列数据吗?用什么 关键值?我假设RSA*参数应该持有私钥?它是怎么变的 加载?我已经使用HMAC函数生成了一个SHA散列,但是我在这里有点不知所措-有什么帮助吗 或样本代码将不胜感激。(是的,我知道谷歌有图书馆可以做到这一点,但没有如何在C中使用OpenSSL生成RSA SHA签名,c,openssl,rsa,sha,C,Openssl,Rsa,Sha,我需要一些使用OpenSSL的帮助,以便使用C(Windows和Linux)生成数据块的签名。该应用程序与谷歌认证有关。谷歌文档中的说明如下: “使用SHA256withRSA(也称为RSASSA-PKCS1-V1_5-Sign)对输入的UTF-8表示进行签名 使用SHA-256散列函数)和从Google开发者控制台获得的私钥 输出将是一个字节数组。“ 私钥是一个包含1660字节二进制数据的.p12文件 我是否使用RSA_sign()API来实现这一点?如果是这样,我应该先散列数据吗?用什么 关
对于C,我需要使用它)。您可以使用
RSA\u-sign
使用SHA256散列对数据进行签名。你可以称之为
RSA_sign(NID_sha256, digest, digest_len, &sign_buffer, sign_len, rsa_key);
您已经将数据的SHA256散列计算到摘要
缓冲区中<代码>rsa_密钥应初始化
由于您有.p12
文件,因此需要执行以下操作
从.p12
文件创建PKCS12
结构
PKCS12 * p12 = d2i_PKCS12_fp(fp_to_p12_file, NULL);
将p12
结构解析为证书和密钥
PKCS12_parse(p12, passphrase, &evp_pkey, &x509_cert, NULL);
它将提供EVP_PKEY
结构,您可以从中使用EVP_PKEY\u get1_RSA
或访问EVP_PKEY->PKEY.RSA
结构的成员
这将帮助您开始。谢谢,这非常有帮助。我试图在Windows DLL中测试这一点,在调用d2i_PKCS12_fp()时,我得到一个运行时错误:“OPENSSL_上行(03CE1000,08):没有OPENSSL_Applink”。读到这个错误,我想我需要做的就是在我的项目中包含“applink.c”,并调用CRYPTO_malloc_init(),我已经这样做了,但没有效果。对此有什么想法吗?你有没有先尝试OpenSSL_add_all_算法?没有运气-我认为基本问题与我的dll的内存模型和OpenSSL库中使用的内存模型有关,特别是关于调用fopen、fread等的C运行时库。如果有一种方法可以将文件操作限制在我的代码中,我自己读取.p12文件,在创建PKCS12结构时只传递一个缓冲区,这会起作用,但我看不到任何选项。@Jeff OpenSSL Windows Applink的设计(仅)允许EXE调用OpenSSL DLL;它不适用于(其他)DLL中的调用方。正如您所建议的,您可以自己阅读该文件并调用
d2i_PKCS12
(无后缀)。OpenSSL中的DER例程有3种变体:i2d\u x
到内存和d2i\u x
从内存、i2d\u x\u fp d2i\u x\u fp
到文件*
和i2d\u bio d2i\u bio
到bio*
。最后一个选项是:您可以调用BIO_new_file
从C运行时的OpenSSL区域打开文件,d2i_x_BIO
,然后调用BIO_free
it;这样就不需要Applink了。。。。。。请参阅d2i_X509/i2d_X509/等的手册页。其中列出了X509的选项;虽然没有为其他类型单独记录,但相同的模式适用于它们。