关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的应用

栏目: 编程工具 · 发布时间: 6年前

内容简介:国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4和最新的sm9。在国内环境主要使用的国家密码局认定的算法。SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。其实就是类似

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4和最新的sm9。在国内环境主要使用的国家密码局认定的算法。

SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。

其实就是类似RSA算法,但是大家都知道,RSA算法位数要求已经在2048以上了,SM2不同的是可以使用较少的位数保证较强的密码强度。

SM3算法,SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。

与md5相似,但是比md5更长,具有更高的安全性。

SM4算法:分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

与AES相似。

SM9算法:是由国密局发布的一种IBE(Identity-Based Encryption)算法。IBE算法以用户的身份标识作为公钥,不依赖于数字证书。

一种新型的公私钥算法,基于身份标识的。

openssl的编程初探

在算法实现中,不免要使用openssl库来进行操作,openssl 很强大,提供了健壮的,全功能的加密套件。

openssl官网

有兴趣的同学可以详细去学习下,openssl有着大量的API可以使用,可以实现大量的密码算法。

开源算法(gmsll.org)

这里我使用的是北京大学 关志 副研究员的密码学研究组开发维护的 GmSSL ,此项目上openssl的分支,可以替代openssl,并增加了对国密的支持.

在网上找了很多关于此开源库的使用方法,都不是很明白,我对这个项目的使用方法做一个总结,可以支持在多个平台上使用。

下面我们来看看具体的使用方法

示例代码可以在 github 上面可以下载得到,给出了测试代码,可以直接进行下载调试,主要实现的是 sm2的加解密sm4的加解密 ,欢迎star。

使用方法都是:

  1. 编译GmSSL库,得到对应的文件。
  2. 引用文件。
  3. 使用对应语言调用。

编译环境为(macbook + ubuntu虚拟机)

evp api

介绍

首先是 EVP API ,这是对GmSSL接口的一个封装,隐藏了API实现的细节,提供了一个抽象的,统一的接口。我们可以借助这个接口来实现其他平台的使用。

编译

我在Ubuntu环境下面

./config
make

make成功后,生成 libcrypto.so.1.1 和 libssl.so.1.1

在code文件夹下面,编写自己的sm4.c,utils.c,sm2.c

然后利用下面的代码进行编译。

gcc -Wall code/sm4.c code/sm2.c code/utils.c -o my_gmssl -lssl -lcrypto -L. -I include -I apps -I . -L /usr/lib/ssl

测试

编写测试代码:

关于国密 (sm2,sm3,sm4)在 <a href='https://www.codercto.com/topics/18170.html'>Linux</a> 、 <a href='https://www.codercto.com/topics/20097.html'>python</a> 、Android、 <a href='https://www.codercto.com/topics/22013.html'>java</a> 、ios中的应用

运行结果:

关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的应用

测试成功。

java API的使用方法(Android)

介绍

在Android里面调用这个库的方法,主要是通过编译.so动态链接库的方式进行引用。在官方的 github 中,已经给出了相关代码,但是缺少了ndk编译过程。

编译

有些手机里面并不支持,.so.1.1的soname,所以在引用libssl.so.1.1 和libcrypto.so.1.1的时候出现了问题,解决方法是

readelf -d libssl.so
rpl -R -e .so.1.1 "_1_1.so" libcrypto.so
rpl -R -e .so.1.1 "_1_1.so" libssl.so

python 调用方法

当使用memcpy或者strcpy进行复制结果字符串时,在 c语言 里面运行正常,但是引入到python里面的时候会出现多一位或几位字符的情况,所以输出结果转换成了16进制字符串,这样结果就稳定了。


以上所述就是小编给大家介绍的《关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的应用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Flexible Rails

Flexible Rails

Peter Armstrong / Manning Publications / 2008-01-23 / USD 44.99

Rails is a fantastic tool for web application development, but its Ajax-driven interfaces stop short of the richness you gain with a tool like Adobe Flex. Simply put, Flex is the most productive way t......一起来看看 《Flexible Rails》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具