C 语言或者 C++上面有 Sha1WithRSA 的签名算法解决方案吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
adairjun
V2EX    C

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

  •  
  •   adairjun 2016-04-09 15:36:14 +08:00 2928 次点击
    这是一个创建于 3486 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言    2016-04-11 08:16:02 +08:00
    各位,我目前的解决方法是先使用 SHA1 这个函数进行摘要,然后再用 RSA_sign 进行签名。我之前遇到的问题是 SHA1 函数签名执行的结果打印出来是乱码,原因我已经找到了,是因为 SHA1 它打印出来的算是二进制的数,而不是十进制的 ASCII 码,需要先将二进制的数字转为十进制的代码。然后 RSA_sign 的第二个参数和第三个参数也是 SHA1 摘要的内容和长度,并不是明文的内容和长度。
    踩了这些坑,终于弄出来了。
    9 条回复    2016-04-10 20:26:14 +08:00
    Archangel_SDY
        1
    Archangel_SDY  
       2016-04-09 15:51:41 +08:00
    难道不是你先算个 SHA-1 ,再 RSA 一下?
    adairjun
        2
    adairjun  
    OP
       2016-04-09 15:54:38 +08:00
    @Archangel_SDY :我现在的方案就是自己先用 Sha1 进行摘要,然后将摘要再做个 RSA ,但是做出来的签名乱七八糟的,本来想 google 搜一下看有没有 C 语言的例子,结果到处都搜不到
    SoloCompany
        3
    SoloCompany  
       2016-04-09 16:57:31 +08:00
    echo test | openssl sha1 -sign private.key -hex
    (stdin)= 302d02150088400760bb802e82c1eb7904a635e9c7320bc9070214484a37c04e11b5ecdaefebe82e0f6f5d82d19b36
    VmuTargh
        4
    VmuTargh  
       2016-04-09 17:32:16 +08:00
    github 搜啊 现成好多
    buf1024
        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 。
    jinsongzhao
        6
    jinsongzhao  
       2016-04-10 13:08:51 +08:00 via Android
    sha-1 很难找,只能自己从 Java 上移植。建议绕道。
    mutalisk
        7
    mutalisk  
       2016-04-10 13:27:44 +08:00
    boost 中有 sha1
    gaodeng
        8
    gaodeng  
       2016-04-10 15:15:59 +08:00
    openssl 源码的 test 文件夹下面找找,没准有例子。
    feelapi
        9
    feelapi  
       2016-04-10 20:26:14 +08:00
    crypto++
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1312 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:55 PVG 00:55 LAX 09:55 JFK 12:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86