精华内容
下载资源
问答
  • sm2签名
    2022-07-01 10:11:38

      虽然都是国密算法SM2,但是随着厂商不一样,每个厂商的使用方法不一样,导致SM2签名结果不一致,今天就给大家介绍一些示例,都是各种对接过程中的存货,会拆分成几个文章进行讲解。

    为了确保安全,示例中的密钥会使用几个*号进行代替。

    SM2公钥(长度124):

    MFkwE**********CAQYIKoEcz1UBgi0DQgAE1xPq3B3Cw2U+t+R7Fb0JCJvy87/LDbUDFilGjkQU89VLl57pbUPLKUwP2jnAyOEKmJS9USsz+VwXNd4/bjdIFA==

    SM2私钥(长度64):

    D5F2A**********71B54A8C9AD735F9A1DE9C4657FA386C09B592694BC118B38

    待签名字符串:{"ecToken":"xxxxxxxxxssssssss","idNo":"340100198808089999","idType":"01","insuOrg":"010203","userName":"测试人员"}

    SM2签名值(长度96):

    MEUCIDkOMl63z3uro2mIOac53OI1BM4FhZf7WTHPERVLO7DZAiEAvpxiEKLZmEB3j36XgbiqvRypBgBo84kCOUt6RpNTDxs=

     

    下载地址:国密SM4加解密SM2签名验签COM组件DLL.rar_delphi7sm4-其它文档类资源-CSDN下载

     

    daf87f7527ce4998b882c4ff7ff8a57a.png

     

     

    更多相关内容
  • SM2签名入参填写“SM2Sign”、SM4解密入参填写“SM4DecryptECB”、SM4加密入参填写“SM4EncryptECB”. 2)参数二sM2Prikey:SM2私钥 3)参数三sM4Key:SM4密钥 4)参数四sInput:当smType=SM2Sign,则sInput入参...
  • SM2签名入参填写“SM2Sign”、SM4解密入参填写“SM4DecryptECB”、SM4加密入参填写“SM4EncryptECB”. 2)参数二sM2Prikey:SM2私钥 3)参数三sM4Key:SM4密钥 4)参数四sInput:当smType=SM2Sign,则sInput入参...
  • C#编写的exe工具,可实现SM2签名验签,SM4加解密,100%适用于黑龙江省国家医保接口中进行应用。 操作方式:使用编译程序调用exe工具,exe工具将结果写入目录SM2SM4.txt中,再读取txt内容即可。 提供给第三方无法实现...
  • 虽然都是国密算法SM2,但是随着厂商不一样,每个厂商的使用方法不一样,导致SM2签名结果不一致,今天就给大家介绍一些示例,都是各种对接过程中的存货,会拆分成几个文章进行讲解。为了确保安全,示例中的密钥会使用...

      虽然都是国密算法SM2,但是随着厂商不一样,每个厂商的使用方法不一样,导致SM2签名结果不一致,今天就给大家介绍一些示例,都是各种对接过程中的存货,会拆分成几个文章进行讲解。

    为了确保安全,示例中的密钥会使用几个*号进行代替。

    SM2公钥(长度130):

    04383**********115EF146FF9E8D5BD9EE04A8799B4A7B49EAB39F02B6572CA8C2AF0C25EA02B77EDA895DBE5A966EC06793D65E0FE2C61778ED140BB818C95DF

    SM2私钥(长度64):

    E311F**********9899D01A29AEB08DCC474724CE764BBC8AD6D3E80EB4CF90D

    待签名字符串:{"ecToken":"xxxxxxxxxssssssss","idNo":"340100198808089999","idType":"01","insuOrg":"010203","userName":"测试人员"}

    SM2签名值(长度144):

    3045022062f27e09d7b3ed8410efbc26633a3bbab59c668e28b176a6edb0a4df230b2648022100928722e9837229f39964071bf26cf5e307890e81c85b0e2d50c381e194cecd35

    下载地址:国密SM4加解密SM2签名验签COM组件DLL.rar_delphi7sm4-其它文档类资源-CSDN下载提供给第三方软件,调用COM组件DLL方式进行实现,如delphi、PB等。调用方法与黑龙江省医保社delphi7sm4更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/wdsfeisng/31813059

     

    展开全文
  • 国密算法SM2签名、SM2验证签名示例(二);SM2模式与ASN1区别在于签名值长度不一样。

     虽然都是国密算法SM2,但是随着厂商不一样,每个厂商的使用方法不一样,导致SM2签名结果不一致,今天就给大家介绍一些示例,都是各种对接过程中的存货,会拆分成几个文章进行讲解。

    为了确保安全,示例中的密钥会使用几个*号进行代替。

    SM2模式,和示例一中的ASN1是有区别的。同样的公私钥,签名值不一样。如.NET和JAVA对接时会出现。

    SM2公钥(长度88):

    BEdX9*****uXRXwNtHz47DJO0Th4PJLLWqsnqXjK5v6wGyPyDL6FeXAD2+hK/fWyp9K+b8AVk+sc94g/6gyR6j4=

    SM2私钥(长度44):

    ASwcX*****y2hZYC+5DZ6jCRpNg6R0bFtOJD6J+WyJk=

    待签名字符串:{"ecToken":"xxxxxxxxxssssssss","idNo":"340100198808089999","idType":"01","insuOrg":"010203","userName":"测试人员"}

    SM2签名值(长度96):

    MEQCIDE2eEs50WmWkcG49MXq3UyEpbPj0xW9rbc3SZ+bd++sAiA4761FXv1ATiIn/S8liwucnYq3Zbn7+mPbb8YXQ7/3+A==

    下载地址:国密SM4加解密SM2签名验签COM组件DLL.rar_delphi7sm4-其它文档类资源-CSDN下载

    展开全文
  • 国密算法sm实现 sm2数字签名 密钥交换,sm3,sm4,已实现、求sm2第四部分公钥加密c实现源码。。。江湖救急。。。
  • SM2 签名预处理操作

    千次阅读 2020-06-13 16:31:36
    一般情况下,计算数字签名时应执行以下操作: 1. 计算原始数据的 Hash 值; 2. 将 Hash 值作为输入,计算签名函数的输出。并不是对原始数据直接签名,而是对 Hash 值签名。 验证签名时应执行以下操作: 1. 计算...

    如果觉得写得不错,烦请微信搜索公众号 "郑州行疆户外" 了解程序员的户外业余喜好。

     转载:https://www.xuebuyuan.com/1473900.html

    一般情况下,计算数字签名时应执行以下操作:

    1. 计算原始数据的 Hash 值;
    2. 将 Hash 值作为输入,计算签名函数的输出。并不是对原始数据直接签名,而是对 Hash 值签名。
        验证签名时应执行以下操作:
    1. 计算原始数据的 Hash 值;
    2. 将 Hash 值和签名值作为输入,计算验签函数的输出,根据输出判断签名为“有效”或“无效”。
    这只是一个简单描述,实际上 PKCS#1 中规定的签名和验签过程要复杂得多。

        计算 SM2 签名和验签的过程有点特殊,因为根据国内的行业标准,SM2 签名算法要和 SM3 Hash 算法搭配使用,并且计算 SM2 签名的输入并不是待签名数据的 SM3 杂凑值,而是一个预处理阶段的输出。
        预处理分为两步:
    1. 定义一个级联生成的字节流 T1 = ENTL || ID || a || b || x_G || y_G || x_A || y_A,
       其中 || 表示字节流的拼接,
       ENTL 是用两个字节表示的签名者 ID 的比特长度(注意不是字节长度),
       ID 为签名者的标识,
       a, b, x_G, y_G 都是标准中给定的值, x_A 和 y_A 是签名者的公钥,
       对字节流 T1 计算 SM3 杂凑值,得到的输出为 Z = SM3(T1)。
       这一步并没有用到待签名数据。
    2. 将待签名数据用 M 表示,将 Z 与待签名数据级联,得到 T2 = Z || M,计算 T2 的杂凑值,即    SM3(T2),SM3(T2)才是 SM2 签名函数的真正输入。
       注意预处理中用到的数都采用 big-endian 表示法!

        从上面的预处理过程可以看出,当验证签名时,也要经过同样的预处理过程,将预处理阶段的输出、签名值作为验签函数的输入。

        网上有很多 SM3 杂凑算法的开源实现,比如这个网址上提供的:https://github.com/siddontang/pygmcrypto/tree/master/src 。但是一般能找到的 SM3 实现都没有提供预处理功能,所以是不能直接用作计算 SM2 签名和验签的输入。在上面网址提供的
    SM3 实现基础上,本文将给出一个预处理的实现。首先从标准中可以查到预处理第 1 步中 a、b、x_G 、 y_G 的值。签名者的公钥通常是以结构体的形式给出的,对于加密机,公钥定义为
    typedef struct ECCrefPublicKey_st
    {
      unsigned int bits;
      unsigned char x[64];
      unsigned char y[64];
    } ECCrefPublicKey;
    对于 Ukey,公钥定义为
    typedef struct Struct_ECCPUBLICKEYBLOB
    {
      ULONG BitLen;
      BYTE XCoordinate[64];
      BYTE YCoordinate[64];
    } ECCPUBLICKEYBLOB;
        注意这两个结构体在本质上是一样的。ECCPUBLICKEYBLOB 中出现的 ULONG 并不是 unsigned long,在 Ukey 国内标准中将 ULONG 定义为无符号 32 位整数类型,因此可以把这个 ULONG 看作是 unsigned int。

        由于是结构体,可能会遇到对齐的问题,常见的情况是:硬件厂商在实现接口时是按 1 字节对齐( 即用 #pragma pack (1) 设定),最好看看硬件厂商提供的用户手册核实一下,确保没有问题。本文中假定上面两个结构体都已被设为按 1 字节对齐。
        对于 SM2 算法,公钥的 X 分量和 Y 分量都是 32 字节长,因为以 big-endian 方式存放在对应数组中,对应数组大小为 64 字节,所以数组中前 32 字节的值为 0, 后 32 字节的值对应于分量。这一点在从数组中提取出分量值时要用到。

        下面给出 SM2 签名前的预处理的计算 C 程序:

    /************************************************** 
    * Author: HAN Wei 
    * Author's blog: http://blog.csdn.net/henter/ 
    * Date: Oct 30th, 2013 
    * Description: the following codes demonstrates how to 
                   perform SM3 Hash pre-process for SM2 signature 
    **************************************************/ 
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "sm3.h"
    
    /**************************************************
    *函数名称:SM3HashWithPreprocess
    *功能: 计算 SM3 杂凑值(可能包含为满足 SM2 签名要求所做的预处理操作)
    *参数:
     input[in]                         输入数据
     input_byte_len[in]                输入数据的字节长度
     public_key[in]                    签名者的公钥
     public_key_byte_len[in]           签名者公钥的字节长度
     signer_ID[in]                     签名者的 ID 值
     signer_ID_byte_len[in]            签名者 ID 的字节长度
     hash_value[out]                   SM3 杂凑值
     hash_value_byte_len_pointer[out]  指向表示 SM3 杂凑值字节长度变量的指针
    *返回值:
        0    成功
        -1   失败
    *备注:
       如果以下四个条件:
       a) 输入参数 public_key 是空指针;
       b) 输入参数 public_key_byte_len 的值等于 0;
       c) 输入参数 signer_ID 是空指针;
       d) 输入参数 signer_ID_byte_len 的值等于 0。
       中有一个成立,就直接计算输入数据 input 的 SM3 杂凑值,
       忽略输入参数 public_key, public_key_byte_len, signer_ID
       和 signer_ID_byte_len,这时不会进行 SM2 算法签名预处理
       操作。
       如果四个条件全部不成立,才执行 SM2 算法签名预处理操作,
       预处理计算过程遵循 GM/T 0009《 SM2 密码使用规范》。
    **************************************************/
    int SM3HashWithPreprocess(unsigned char *input,
                              unsigned int input_byte_len,
                              unsigned char *public_key,
                              unsigned int public_key_byte_len,
                              unsigned char *signer_ID,
                              unsigned int signer_ID_byte_len,
                              unsigned char *hash_value,
                              unsigned int *hash_value_byte_len_pointer);
    
    /*********************************************************/
    int SM3HashWithPreprocess(unsigned char *input,
                              unsigned int input_byte_len,
                              unsigned char *public_key,
                              unsigned int public_key_byte_len,
                              unsigned char *signer_ID,
                              unsigned int signer_ID_byte_len,
                              unsigned char *hash_value,
                              unsigned int *hash_value_byte_len_pointer)
    {
      unsigned short ID_bit_len;
      unsigned char *step1_input;
      unsigned int step1_input_byte_len;
      unsigned char step1_output[32];
      unsigned char *step2_input;
      unsigned int step2_input_byte_len;
    
      unsigned char a[32]={0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
                           0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
                           0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
                           0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC};
            
      unsigned char b[32]={0x28, 0xE9, 0xFA, 0x9E, 0x9D, 0x9F, 0x5E, 0x34,
                           0x4D, 0x5A, 0x9E, 0x4B, 0xCF, 0x65, 0x09, 0xA7,
                           0xF3, 0x97, 0x89, 0xF5, 0x15, 0xAB, 0x8F, 0x92,
                           0xDD, 0xBC, 0xBD, 0x41, 0x4D, 0x94, 0xE,  0x93};
    
      unsigned char x_G[32]={0x32, 0xC4, 0xAE, 0x2C, 0x1F, 0x19, 0x81, 0x19,
                             0x5F, 0x99, 0x4,  0x46, 0x6A, 0x39, 0xC9, 0x94,
                             0x8F, 0xE3, 0xB,  0xBF, 0xF2, 0x66, 0xB,  0xE1,
                             0x71, 0x5A, 0x45, 0x89, 0x33, 0x4C, 0x74, 0xC7};
    
      unsigned char y_G[32]={0xBC, 0x37, 0x36, 0xA2, 0xF4, 0xF6, 0x77, 0x9C,
                             0x59, 0xBD, 0xCE, 0xE3, 0x6B, 0x69, 0x21, 0x53,
                             0xD0, 0xA9, 0x87, 0x7C, 0xC6, 0x2A, 0x47, 0x40,
                             0x2,  0xDF, 0x32, 0xE5, 0x21, 0x39, 0xF0, 0xA0};
    
    // 下面定义的结构体 x 用于判断当前环境是 big-endian 还是 little-endian
      union { int i;
              char c[sizeof(int)];
            } x;
    
      if ( (!public_key) || (!public_key_byte_len) || (!signer_ID) || (!signer_ID_byte_len) )
      {
        sm3(input, input_byte_len, hash_value);
        *hash_value_byte_len_pointer = 32U;
        return 0;
      }
    
    // 下面为满足 SM2 签名的要求,做预处理操作
      step1_input_byte_len = (2 + signer_ID_byte_len + 32 * 6);
      if ( !(step1_input = (unsigned char *)malloc(step1_input_byte_len)) )
      {
    #ifdef _DEBUG
        printf("malloc function failed at %s, line %d!\n", __FILE__, __LINE__);
    #endif
        return (-1);
      }
     
    /* 预处理1 */
      ID_bit_len = (unsigned short)(signer_ID_byte_len*8);
    
    /* 判断当前环境是 big-endian 还是 little-endian。
       国密规范中要求把 ENTL(用 2 个字节表示的 ID 的比特长度)
       以 big-endian 方式作为预处理 1 输入的前两个字节  */
      x.i = 1;
      if(x.c[0] == 1)  /* little-endian */
      {
        memcpy(step1_input, (unsigned char *)(&ID_bit_len) + 1, 1);
        memcpy((step1_input + 1), (unsigned char *)(&ID_bit_len), 1); 
      }
      else  /* big-endian */
      {
        memcpy(step1_input, (unsigned char *)(&ID_bit_len), 1);
        memcpy((step1_input + 1), (unsigned char *)(&ID_bit_len) + 1, 1);
      }
    
      memcpy((step1_input + 2), signer_ID, signer_ID_byte_len);
      memcpy((step1_input + 2) + signer_ID_byte_len, a, 32);
      memcpy((step1_input + 2) + signer_ID_byte_len + 32, b, 32);
      memcpy((step1_input + 2 + signer_ID_byte_len + 64), x_G, 32);
      memcpy((step1_input + 2 + signer_ID_byte_len + 96), y_G, 32);
      memcpy((step1_input + 2 + signer_ID_byte_len + 128), (public_key + 4 + 32), 32);
      memcpy((step1_input + 2 + signer_ID_byte_len + 160), (public_key + 4 + 64 + 32), 32);
      sm3(step1_input, step1_input_byte_len, step1_output);
    
    /* 预处理2 */
      step2_input_byte_len = (32 + input_byte_len);
      if ( !(step2_input = (unsigned char *)malloc(step2_input_byte_len)) )
      {
    #ifdef _DEBUG
        printf("malloc function failed at %s, line %d!\n", __FILE__, __LINE__);
    #endif
        free(step1_input);
        return (-1);
      }
      memcpy(step2_input, step1_output, 32);
      memcpy((step2_input + 32), input, input_byte_len);
      sm3(step2_input, step2_input_byte_len, hash_value);
      *hash_value_byte_len_pointer = 32U;
      
      free(step1_input);
      free(step2_input);
      return 0;
    }
    

         编译时要用到文件 sm3.h 和 sm3.c,这两个文件的下载网址前面已经给出。

     

    如果觉得写得不错,烦请微信搜索公众号 "郑州行疆户外" 了解程序员的户外业余喜好。

    展开全文
  • 国密算法SM2签名、SM2验证签名示例(一)ASN1模式
  • SM2签名方案的安全性

    2022-06-24 20:38:33
    证明SM2签名方案是 EFU-CMA 安全的,且可以抵抗密钥替换(KS)攻击
  • 国密(2)-- SM2签名和加密算法介绍

    千次阅读 2022-05-05 15:54:20
    最详细的SM2签名验签和加解密的介绍;
  • 【转】C#sm2签名验签实现

    千次阅读 热门讨论 2022-06-09 18:12:56
    【转】C#sm2签名验签实现
  • go/Java 国密sm2签名验签

    千次阅读 2021-03-06 05:38:27
    近期go项目对接第三方Java服务,第三方要求使用国密sm3/sm2算法进行数据签名验签,特记录go端开发注意事项1 关于密钥对密钥生成可以使用openssl库,openssl版本至少是1.1.1,终端运行 openssl version检查版本,之前版本...
  • c# sm2签名
  • 关于SM2签名算法的实现

    千次阅读 2020-02-29 11:50:06
    国密标准的SM2签名算法,并不是简单的将明文通过SM3算法Hash,再将Hash结果通过SM2算法使用私钥进行签名。 Hash这块比较复杂,要经过两次SM3算法进行Hash。 中间还有Za参与运算。 第一次Hash其实只是对Za的Hash,Za...
  • 基于gmssl SM2 签名验签测试程序

    千次阅读 热门讨论 2021-03-23 16:43:13
    基于gmssl SM2 签名验签测试程序前言一、sm2 签名流程一、sm2 验签流程总结 前言 在之前的文章中讲解了基于gmssl 的SM2的加解密接口的测试程序,这里主要讲解签名验签的接口测试。 一、sm2 签名流程 代码如下: ...
  • OpenSSL sm2 签名源码讲解

    千次阅读 2021-06-27 14:51:29
    签名原理https://blog.csdn.net/Asia_ZhangQQ/article/details/96854514这个文章有详细说明,这里就不再说了,直接上源码 1.格式转换,OpenSSL EVP签名用到...sm2CreateEVP_PKEY(privateKey, 0, &pKey); 具体stri.
  • SM2 签名算法秘钥在线生成

    千次阅读 2022-03-13 09:15:04
    SM2 密钥在线生成工具 (const.net.cn) Web Encrypt
  • SM2签名验签实现

    千次阅读 2020-08-20 10:55:12
    转发来自:https://github.com/hwyqb/SM2_SM3_SM4Encrypt 需要注意的就是 1.明文转16进制不要直接getBytes,先base64转码后再16进制转换 2.大小写和加密机统一,要么全大写,要么全小写。
  • SM2签名的预处理过程

    2020-11-15 11:01:23
    SM2签名及验证过程中,并不是直接计算被签名数据的摘要,而是要经过专门的预处理过程得到摘要。此过程包含两个阶段的摘要计算: 1)Z = SM3(ENTL || ID || a || b || x_G || y_G || x_A || y_A) ENTL || ID || a || ...
  • SM2签名算法实现

    千次阅读 2020-09-29 16:50:08
    public String sm2Sign(String text) throws SignatureException { return Sm2Utils.createSM2Signature(text, smSignPrikey); } //参数text代表需要签名的明文 使用这个签名算法需要导入crypto-1.0-SNAPSHOT....
  • GB35114---聊聊SM2签名格式

    千次阅读 热门讨论 2020-03-17 11:58:05
    公司原计划是年后让我直接去公安一所过35114的认证,...现在回过头来看,其实SM2签名格式不理解是导致一直验签失败的主要原因。 按照国密的规范,SM2签名结果r||s长度应该是(r:32字节)+(s:32字节)64字节,就算加个0...
  • 功能包括:国密SM4加密、SM4解密、SM2签名、SM2验签(有需要可联系加入) 1、调用DLL名称:JQSM2SM4.dll 加解密类名:JQSM2SM4.SM2SM4Util CLSID=5B38DCB3-038C-4992-9FA3-1D697474FC70 2、GetSM2SM4函数说明 ...
  • SpringBoot 自定义注解 SM2 验签 签名
  • SM2签名验签

    2018-10-24 09:58:11
    SM2签名验证 根据gmssl编译,并封装,解析p12的SM2证书,按照jwt的生成方式生成idtoken
  • 基于安全和宏观战略考虑,我国从 2010 年先后推出了 SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、ZUC(祖冲之密码算法)等密码算法,本文主要讨论 SM2 算法原理,iOS 端如何使用 SM2、SM4 加解密,及使用 SM3 生成 Hash ...
  • openssl SM2签名密钥生成

    千次阅读 2021-05-08 23:36:48
    1 生成sm2私钥: openssl ecparam -genkey -name SM2 -out sm2PriKey.pem 2 sm2私钥导出公钥: openssl ec -in sm2PriKey.pem -pubout -out sm2PubKey.pem 3 查看私钥: openssl ec -in sm2PriKey.pem -text 4 私钥pkcs...
  • 国家医保移动支付国密算法SM2签名、SM2验签、SM4加密、SM4解密、JSON排序(去除null和空字符串),试用各地区医保移动支付接口测试,如安徽医保。 使用C#基于.NET框架4.0编写。 如果电脑打不开exe,请百度搜索...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,329
精华内容 1,331
关键字:

sm2签名