点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~

最近0基础在学习国密算法的相关应用,故此和大家分享下自己的一些经历。

程序平台: Ubuntu16.04  x64

一、国密SM3与SM4

国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。不懂也没关系,以后别人说SM2、SM3、SM4知道它们是干啥的就行。这次主要和大家从简单的SM3、SM4说起。

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

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

里面的一些术语不知道也没关系,以后会再梳理的......

二、信息摘要(SM3)一些特性

消息摘要或者哈希函数以任意消息(任意内容或者任何长度)作为输入,然后产生一个固定长度大小的哈希值作为结果输出。具体来说,该函数具有以下特性:

· 对于任意给定的消息,生成哈希值很简单

· 从任意给定的哈希值去计算出一条消息是不可行的(即函数是单向的)

· 修改消息而不修改哈希值是不可行的

· 找到两条具有相同哈希值的消息是不可行的

三、开源程序使用举例

测试文件结构如图:

测试源码:

#include <SM3.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h># define EVP_MAX_MD_SIZE                 32
#define ALLOC_OBJ(type, size) (type *)calloc(1, (sizeof(type)*size))int main()
{unsigned char msgbuf[] = "abc";unsigned char msgbuf1[] = "abc";unsigned char dgst[EVP_MAX_MD_SIZE];unsigned int dgstlen = (unsigned int)sizeof(dgst);SM3_state *ctx = ALLOC_OBJ(SM3_state, 1);SM3_Init(ctx);SM3_Update(ctx, msgbuf, sizeof(msgbuf)-1);SM3_Final(dgst, dgstlen, ctx, sizeof(msgbuf)-1);printf("Digest1 is: ");for (int i = 0; i < dgstlen; i++)printf("%02x", dgst[i]);printf("\n");// second useSM3_Hash(msgbuf1 , sizeof(msgbuf1)-1, dgst, dgstlen);printf("Digest2 is: ");for (int i = 0; i < dgstlen; i++)printf("%02x", dgst[i]);printf("\n");free(ctx);return 0;
}

测试效果:

SM4简单举例:

int main()
{unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};unsigned char iv[] = {1,2,3,4,5,6,7,8};unsigned char plain_text[] = "hello world!";unsigned char out_plain_text[sizeof(plain_text)];unsigned char cipher_text[16];SM4_EncCBC(key, iv, plain_text, cipher_text, sizeof(plain_text)-1);SM4_DecCBC(key, iv, cipher_text, out_plain_text, sizeof(plain_text)-1);printf("%s\n",cipher_text);printf("%s\n",out_plain_text);return 0;
}

四、小结与资源链接

①国密C语言实现的git链接:

https://github.com/JulongChain/julongchain-csp-sdt

②相关术语链接:

http://gmssl.org/docs/evp-api.html

③纯初学入门,为了快速应用。最开始用的GmSSL,这个文档相对全一些,对初学者会友好一些,但是还是需要一点儿密码学的基础,我是两个结合一起看的。

需要完整程序的可在公众号后台留言说明。

每日××× :有机会一定要体验不同的生活方式与工作方式!

国密算法SM3与SM4简介与应用相关推荐

  1. JAVA-国密算法SM3和SM4应用Example

    参考资料: https://baijiahao.baidu.com/s?id=1629915330021466224&wfr=spider&for=pc https://github. ...

  2. Java 国密算法 SM3 散列哈希使用

    Java 国密算法 SM3 散列哈希使用 文章目录 Java 国密算法 SM3 散列哈希使用 引入依赖 计算散列哈希 引入依赖 <dependency><groupId>org ...

  3. php 国密算法,SM2,SM4,SM3,国密算法PHP版.rar

    1 身份认证例子(htm5)\普通例子\网页驱动安装\SetUp.exe 7.23 MB 2017/8/10 18:21:12 2 身份认证例子(htm5)\自动登录安装包\自动登录安装包\SetUp ...

  4. 国密算法SM3(杂凑算法)

    国家密码管理局关于发布<SM3密码杂凑算法>公告 SM3密码杂凑算法 JavaScript对本算法的一个实现:https://github.com/wcube/sm-crypto

  5. 国密算法 SM2公钥密码 SM3杂凑算法 SM4分组密码 python代码完整实现

    包含SM2公钥密码.SM3杂凑算法和SM4分组密码的国密算法完整工具包完成了.此前分别发布过上述三个算法的代码: SM2:国密算法 SM2 公钥加密 非对称加密 数字签名 密钥协商 python实现完 ...

  6. 基于国密算法实现主机之间的密钥分发和安全传输-2021西北工业大学网络空间安全学院暑期夏令营

    2021年西北工业大学网络空间安全学院暑期夏令营 一.设计内容与要求: 二.基本思路与实现: 三.设计原理与流程: 3.1 总体流程: 3.2 设计原理: 3.2.1 建立套接字连接: 3.2.2 根 ...

  7. 爬虫逆向基础,认识 SM1/SM2/SM3/SM4/SM7/SM9/ZUC 国密算法

    文章目录 [01x00] 简介 [02x00]算法概述 [03x00]算法详解 [03x01]SM1 分组加密算法 [03x02]SM2 椭圆曲线公钥加密算法 [03x03]SM3 杂凑算法 [03x ...

  8. 通过网页查看服务器算法,服务器使用国密(SM2/SM3/SM4)证书,通过浏览器访问

    1. Apache + Gmssl Apache 本身不支持国密,需要修改代码支持GMTLS 下载解压: wget http://archive.apache.org/dist/httpd/httpd ...

  9. 国密算法(SM2,SM3,SM4)完善与算法辅助工具开发

    国密算法SM2,SM3和改名发布的SM4的应用好像越来越多了.首先是国密SM2证书的升级,国内CA服务商要完成SM2算法证书支持,之后是国密算法在金融领域进行推广,新近编订的PBOC标准的增强安全部分 ...

最新文章

  1. 【python3的学习之路七】函数
  2. 3·15又能把网络电话怎么样?
  3. 【正一专栏】新赛季欧冠小组赛猜想
  4. 记一次WiFi芯片W600上串口只能回显的问题
  5. MATLAB应用实战系列(七十七)-基于长时间序列栅格数据的MK检验
  6. 关于启明星辰IDS无法CONSOLE连接
  7. 使用IntelliJ, 让lombok生效的方式
  8. java将json转为hashmap_将JSON字符串转换为HashMap
  9. 使用 hexo-git-backup 插件备份你的 Hexo 博客
  10. 真格量化-主力跟买策略
  11. 西门子安装未找到ssf文件_V5.3安装时显示NO SSF FILE FOUND对话框,我该怎么解决啊? 谢谢!-工业支持中心-西门子中国...
  12. hadoop--MapReduce_WordCount词频统计案例
  13. Unity MRTK(二)常见操作
  14. sphinx的php扩展,替php安装sphinx扩展
  15. HWSD土壤数据库介绍
  16. 三角形的几何公式大全_小学数学常用公式整理汇总(建议收藏)
  17. java宠物小精灵_4978:宠物小精灵之收服
  18. Order by 1 的解释
  19. StartlsBack 导致屏幕闪烁的解决方法
  20. 知乎上40个有趣回复,很精辟!

热门文章

  1. 【Y9000P 2022 GTX3060 CUDA安装记录】
  2. CC00082.spark——|HadoopSpark.V08|——|Spark.v08|Spark 原理 源码|Spark Context|
  3. 大数据技术原理与应用(林子雨)-NoSQL数据库单元测验
  4. 想要分离歌曲内的伴奏?轻松搞定
  5. 水面漂浮物垃圾识别检测算法 yolov7
  6. Ubuntu环境下安装QT5
  7. Windows10光驱位硬盘不识别
  8. 7、Java基础——从控制台输入:Scanner类的的用法、数据类型转换、字符型的运算、print与println的区别、Java中的转义字符
  9. win7原版镜像_小白重装win7旗舰版系统图文教程
  10. SEO流量变现,看这个项目就够了!