C 语言或者 C++上面有 Sha1WithRSA 的签名算法解决方案吗?

2016-04-09 15:36:14 +08:00
 adairjun

在 C 语言代码构造消息的时候,需要使用 Sha1WithRSA 的签名算法对消息进行签名,因为对方用的是 JAVA 代码,他要使用 Sha1WithRSA 进行验签。然而 C 语言却并不像 JAVA 代码一样有现成的 Sha1WithRSA 算法, openssl 库当中的 RSA_sign ,指定了第一个参数为 NID_sha1 的话,也仅仅做了一个标识,并没有使用 Sha1 进行摘要。

2434 次点击
所在节点    C
9 条回复
Archangel_SDY
2016-04-09 15:51:41 +08:00
难道不是你先算个 SHA-1 ,再 RSA 一下?
adairjun
2016-04-09 15:54:38 +08:00
@Archangel_SDY :我现在的方案就是自己先用 Sha1 进行摘要,然后将摘要再做个 RSA ,但是做出来的签名乱七八糟的,本来想 google 搜一下看有没有 C 语言的例子,结果到处都搜不到
SoloCompany
2016-04-09 16:57:31 +08:00
echo test | openssl sha1 -sign private.key -hex
(stdin)= 302d02150088400760bb802e82c1eb7904a635e9c7320bc9070214484a37c04e11b5ecdaefebe82e0f6f5d82d19b36
VmuTargh
2016-04-09 17:32:16 +08:00
github 搜啊 现成好多
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 。
jinsongzhao
2016-04-10 13:08:51 +08:00
sha-1 很难找,只能自己从 Java 上移植。建议绕道。
mutalisk
2016-04-10 13:27:44 +08:00
boost 中有 sha1
gaodeng
2016-04-10 15:15:59 +08:00
openssl 源码的 test 文件夹下面找找,没准有例子。
feelapi
2016-04-10 20:26:14 +08:00
crypto++

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/269775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX