国密即国家密码局认定的国产密码算法。主要有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。

使用方法都是:编译GmSSL库,得到对应的文件。

引用文件。

使用对应语言调用。

编译环境为(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

测试

编写测试代码:

运行结果:

测试成功。

java API的使用方法(Android)

介绍

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

编译

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

readelf -d libssl.sorpl -R -e .so.1.1 '_1_1.so' libcrypto.sorpl -R -e .so.1.1 '_1_1.so' libssl.so

python 调用方法

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

android 国密签名,关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的...相关推荐

  1. 国密算法分类总结:sm2,sm3,sm4等

    前面几篇博文对sm2,sm3,sm4,rsa,des等算法进行了介绍,并且用java,python语言实现了相关算法的运用. 本篇,作为一个阶段性总结,从整体上来回顾一下密码相关业务.当然,重点还是要 ...

  2. 国密算法 SM2 SM3 SM4 及密钥生成

    国密算法 SM2 SM3 SM4 方式一:SM2密钥在线生成 SM2密钥在线生成工具 如果你没线下生成工具,可用下面2种线上生成方式之一: 1. sm2密钥在线生成(const.net.cn) 2.  ...

  3. php gmssl,支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱GmSSL

    GmSSL概述 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码 ...

  4. javascript sm2 sm3 sm4 国密库

    前面研究了iOS端的sm2,sm3,sm4,sm9,zuc国密.前端后期也会接入国密库,所以研究了下JavaScript的国密.如果需要知道算法原理的可以查看我之前的博客,或者看我的github上也有 ...

  5. OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法

    OpenSSL项目最近6个月添加了许多新特性, 包括对中国SM2/SM3/SM4算法的支持: SM2椭圆曲线: https://github.com/openssl/openssl/pull/4793 ...

  6. 国密 sm2,sm3,sm4 算法纯 JavaScript 实现

    2014 年国务院办公厅就颁发了<国务院办公厅转发密码局等部门关于金融领域密码应用指导意见>,指出在我国涉及到金融领域信息安全的产品和系统要自主可控,在金融领域使用国产加密标准是机构走向合 ...

  7. 国密算法SM1/SM2/SM3/SM4

    原创不易,转载请注明出处. 国密算法由国家密码局发布,今天大概介绍4中国密算法,分别是SM1,SM2,SM3,SM4.他们之间异同通过下表展示. 算法名称 算法分类 算法是否公开 明文最大长度(bit ...

  8. 国密SM1\ SM2\ SM3\ SM4\ SSF33算法和国际RSA算法的对应关系

    转载自https://blog.csdn.net/hcnetbee/article/details/53692579,部分内容和排版稍作修改. 国密算法由国家密码局发布,包含SM1\ SM2\ SM3 ...

  9. 国密SM2,SM3,SM4的前后台(js和java)加解密写法

    目录 SM2加解密 js java SM3加密 js java sm3前后台(js/java)加密不一致原因 SM4加解密 js java 之前做一个项目的时候需要用到国密SM2,SM3,SM4的加解 ...

  10. java sm_Java国密SM2/SM3/SM4及证书

    1. 使用BC库1.59版本已经可以支持国密算法SM2/SM3/SM4,某大神写的详细测试例子:https://github.com/ZZMarquis/gmhelper 2. 制作证书参考网上资料简 ...

最新文章

  1. 怎样学好python-怎样学好python
  2. UDP千兆以太网FPGA_verilog实现(五、以太网帧的结构)
  3. php定义一个名为Vehicles,[PHP][Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]...
  4. boost::intrusive::derivation_value_traits用法的测试程序
  5. Spring Boot Admin的使用
  6. UrlRewrite(URL重写)--ASP.NET中的实现
  7. angularjs的三种注入方式
  8. 浅析Linux Kernel 哈希路由表实现(一)
  9. 个性化推荐认知之----数字化转型浪潮下,产品经理应如何重新认知个性化推荐?...
  10. iPhone 大降价;谷歌再爆丑闻;京东云金山云回应合并传闻 | 极客头条
  11. 超大文本文件浏览器Snaptext,支持不限制大小的文本文件浏览
  12. 【ctf-3】数论基础+Crypto初步
  13. 计算机与食品科学与工程关系,计算机在食品科学与工程中的应用课程标准.doc...
  14. GP技术的展望——道生一,一生二
  15. 公共自行车点查询_基于预测信息的公共自行车查询系统设计
  16. 软考是什么?关于软考经验分享
  17. som神经网络聚类简单例子_深度聚类的可视化解释
  18. 利用python request细雨筹爬虫
  19. 爱 的 契 约 写给正在感情纠葛的三人
  20. Golang 结构体

热门文章

  1. 重磅!第二届“绽放杯”5G应用征集大赛广东分赛获奖名单出炉!
  2. 为什么即使是最聪明的决策者也会掉入过度自信陷阱?
  3. php 使用3des加解密、hmacsha256加密
  4. 基于php理发店管理系统
  5. 将四个整数按照升序排序
  6. 信息系统项目管理基础知识:企业信息化与电子商务
  7. Halcon 异步抓取图像,图像滤波,获取图像边缘,分割边缘为线段和圆弧,计算长度 分析
  8. 计算一个数字的的长度
  9. WebStorm设置前端开发代码规范
  10. CSS笔记(字体样式,文本属性和颜色样式)