在 C 语言代码构造消息的时候,需要使用 Sha1WithRSA 的签名算法对消息进行签名,因为对方用的是 JAVA 代码,他要使用 Sha1WithRSA 进行验签。然而 C 语言却并不像 JAVA 代码一样有现成的 Sha1WithRSA 算法, openssl 库当中的 RSA_sign ,指定了第一个参数为 NID_sha1 的话,也仅仅做了一个标识,并没有使用 Sha1 进行摘要。
1
Archangel_SDY 2016-04-09 15:51:41 +08:00
难道不是你先算个 SHA-1 ,再 RSA 一下?
|
2
adairjun OP @Archangel_SDY :我现在的方案就是自己先用 Sha1 进行摘要,然后将摘要再做个 RSA ,但是做出来的签名乱七八糟的,本来想 google 搜一下看有没有 C 语言的例子,结果到处都搜不到
|
3
SoloCompany 2016-04-09 16:57:31 +08:00
echo test | openssl sha1 -sign private.key -hex
(stdin)= 302d02150088400760bb802e82c1eb7904a635e9c7320bc9070214484a37c04e11b5ecdaefebe82e0f6f5d82d19b36 |
4
VmuTargh 2016-04-09 17:32:16 +08:00
github 搜啊 现成好多
|
5
buf1024 2016-04-09 20:40:37 +08:00
你参考下,使用 openssl(linux man EVP_SignInit):
int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt); int EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *sig,unsigned int *s, EVP_PKEY *pkey); void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type); int EVP_PKEY_size(EVP_PKEY *pkey); EVP_SignInit_ex 第一个参数使用是加载的 RSA 私钥 EVP_MD_CTX ,第二个参数传递 EVP_sha1(), 第三个参数可以 NULL 。 |
6
jinsongzhao 2016-04-10 13:08:51 +08:00 via Android
sha-1 很难找,只能自己从 Java 上移植。建议绕道。
|
7
mutalisk 2016-04-10 13:27:44 +08:00
boost 中有 sha1
|
8
gaodeng 2016-04-10 15:15:59 +08:00
openssl 源码的 test 文件夹下面找找,没准有例子。
|
9
feelapi 2016-04-10 20:26:14 +08:00
crypto++
|