文档章节

国密算法SM2/3/4实现

realm520
 realm520
发布于 2016/11/24 10:22
字数 545
阅读 1238
收藏 4
ECC

相关信息

国家密码管理局发布的标准

开源实现

简单介绍

SM2

这个就是椭圆加密算法,只是选择了不同的参数。因此用其他一直椭圆曲线的算法实现,通过修改相关方程的参数,也可以实现SM2。关于椭圆曲线的具体算法,可以参考zmworm大神的文章,不过我还是没看懂。

http://www.pediy.com/kssd/pediy06/pediy6014.htm

SM3

这个是类似MD5,SHA256的摘要算法。通过一系列的位运算来获得一个256bit的大数。

SM4

对称加密算法,没仔细看,直接拿源码来用了。跟一般的加密算法用起来没啥区别,一个key既可以加密,也可以解密。

测试

直接上结果吧,最后的测试通过的情况是这样:

  • SM2: 参考GmSSL的实现,直接利用OpenSSL里面的函数设定曲线的参数实现
  • SM3: 直接使用pygmcrypto源码
  • SM4: 直接使用pygmcrypto源码

测试代码: SM4

#include <string.h>
#include <stdio.h>
#include "sm4.h"

int main()
{
    unsigned char key[16] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};
    unsigned char input[16] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10};
    unsigned char output[16];
    sm4_context ctx;
    unsigned long i;

    printf("Key: ");
    for(i=0;i<16;i++)
        printf("%02x ", key[i]);
    printf("\n");
    //encrypt standard testing vector
    sm4_setkey_enc(&ctx,key);
    sm4_crypt_ecb(&ctx,1,16,input,output);
    printf("Encrypted: ");
    for(i=0;i<16;i++)
        printf("%02x ", output[i]);
    printf("\n");

    //decrypt testing
    sm4_setkey_dec(&ctx,key);
    sm4_crypt_ecb(&ctx,0,16,output,output);
    printf("Decrypted: ");
    for(i=0;i<16;i++)
        printf("%02x ", output[i]);
    printf("\n");


    return 0;
}

SM3

#include <string.h>
#include <stdio.h>
#include "sm3.h"

int main( int argc, char *argv[] )
{
        unsigned char *input = "ab";
        int ilen = 2;
        unsigned char output[32];
        int i;
        sm3_context ctx;

        printf("Message:\n");
        printf("%s\n",input);

        sm3(input, ilen, output);
        printf("Hash:\n   ");
        for(i=0; i<32; i++)
        {
                printf("%02x",output[i]);
                if (((i+1) % 4 ) == 0) printf(" ");
        }
        printf("\n");

        printf("Message:\n");
        for(i=0; i < 16; i++)
                printf("abcd");
        printf("\n");

        sm3_starts( &ctx );
        for(i=0; i < 16; i++)
                sm3_update( &ctx, "abcd", 4 );
        sm3_finish( &ctx, output );
        memset( &ctx, 0, sizeof( sm3_context ) );

        printf("Hash:\n   ");
        for(i=0; i<32; i++)
        {
                printf("%02x",output[i]);
                if (((i+1) % 4 ) == 0) printf(" ");
        }
        printf("\n");
    //getch();  //VS2008
}

© 著作权归作者所有

共有 人打赏支持
realm520
粉丝 8
博文 13
码字总数 25892
作品 0
南京
架构师
私信 提问
基于python的国密算法gmssl-python版本发布[3.2.1]

关于 项目起源于一个银行合作项目,银行接口中涉及了大量的国密算法,但是目前大多数类库都是java或者c/c++,于是本人东拼西凑了一个类库,希望能给大家带来方便。 GMSSL GmSSL是一个开源的加...

段洪义
07/30
0
0
支持国密算法的 Python 加密包 - gmssl-python

GMSSL GmSSL是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法、项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。 安装 pip install gmss...

段洪义
07/30
0
0
国密SM2素域椭圆曲线快速约减算法x64编程研究(上)

这是NIST公开资料公布的256位素域椭圆曲线快速约减算法描述: p256 = (2 ^ 256) − (2 ^ 224) + (2 ^ 192) + (2 ^ 96) − 1p256 = ffffffff 00000001 00000000 00000000 00000000 ffffffff ......

safedead
2015/02/10
0
0
支持国密算法和标准的OpenSSL分支--GmSSL

GmSSL (http://gmssl.org) 是支持国密算法和标准的OpenSSL分支,增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持,实现了这些算法与EVP API和命令行工具的集成。GmSSL由北京大学信息...

SimonZhao
2016/05/09
7.7K
8
密码学-学习资料和网站

我接触密码学有一段时间了,把我收集的资料整理出来,以便后期查阅。另外也给网友一些捷径。 书籍 计算机安全和密码学.Computer.Security.And.Cryptography.pdf 英文版 《深入浅出密码学——...

BjarneCpp
01/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

描述 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。 如何反序列化或序列化二叉树是没有限制的,你...

honeymose
今天
5
0
java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
23
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
18
0
my.ini

1

architect刘源源
今天
16
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部