V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
adairjun
V2EX  ›  C

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

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

    在 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   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:45 · PVG 04:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.