国产加密算法 SM3
国密算法工具-SmUtil
介绍
Hutool针对Bouncy Castle
做了简化包装,用于实现国密算法中的SM2、SM3、SM4。
使用
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.16</version>
</dependency>
引入Bouncy Castle
依赖
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.69</version>
</dependency>Copy to clipboardErrorCopied
说明
bcprov-jdk15to18
的版本请前往Maven中央库搜索,查找对应JDK的最新版本。
非对称加密SM2
String text = "我是一段测试aaaa";SM2 sm2 = SmUtil.sm2();
// 公钥加密,私钥解密
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));Copy to clipboardErrorCopied
String text = "我是一段测试aaaa";KeyPair pair = SecureUtil.generateKeyPair("SM2");
byte[] privateKey = pair.getPrivate().getEncoded();
byte[] publicKey = pair.getPublic().getEncoded();SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
// 公钥加密,私钥解密
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));Copy to clipboardErrorCopied
String content = "我是Hanley.";
final SM2 sm2 = SmUtil.sm2();
String sign = sm2.signHex(HexUtil.encodeHexStr(content));// true
boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(content), sign);Copy to clipboardErrorCopied
String content = "我是Hanley.";
KeyPair pair = SecureUtil.generateKeyPair("SM2");
final SM2 sm2 = new SM2(pair.getPrivate(), pair.getPublic());byte[] sign = sm2.sign(content.getBytes());// true
boolean verify = sm2.verify(content.getBytes(), sign);Copy to clipboardErrorCopied
使用曲线点构建中的点生成和验证见:https://i.goto327.top/CryptTools/SM2.aspx?tdsourcetag=s_pctim_aiomsg
String privateKeyHex = "FAB8BBE670FAE338C9E9382B9FB6485225C11A3ECB84C938F10F20A93B6215F0";
String x = "9EF573019D9A03B16B0BE44FC8A5B4E8E098F56034C97B312282DD0B4810AFC3";
String y = "CC759673ED0FC9B9DC7E6FA38F0E2B121E02654BF37EA6B63FAF2A0D6013EADF";// 数据和ID此处使用16进制表示
String data = "434477813974bf58f94bcf760833c2b40f77a5fc360485b0b9ed1bd9682edb45";
String id = "31323334353637383132333435363738";final SM2 sm2 = new SM2(privateKeyHex, x, y);
// 生成的签名是64位
sm2.usePlainEncoding();final String sign = sm2.signHex(data, id);
// true
boolean verify = sm2.verifyHex(data, sign)Copy to clipboardErrorCopied
//需要签名的明文,得到明文对应的字节数组
byte[] dataBytes = "我是一段测试aaaa".getBytes();
//指定的私钥
String privateKeyHex = "1ebf8b341c695ee456fd1a41b82645724bc25d79935437d30e7e4b0a554baa5e";// 此构造从5.5.9开始可使用
final SM2 sm2 = new SM2(privateKeyHex, null, null);
sm2.usePlainEncoding();
byte[] sign = sm2.sign(dataBytes, null);Copy to clipboardErrorCopied
//指定的公钥
String publicKeyHex ="04db9629dd33ba568e9507add5df6587a0998361a03d3321948b448c653c2c1b7056434884ab6f3d1c529501f166a336e86f045cea10dffe58aa82ea13d725363";
//需要加密的明文,得到明文对应的字节数组
byte[] dataBytes = "我是一段测试aaaa".getBytes();
//签名值
String signHex ="2881346e038d2ed706ccdd025f2b1dafa7377d5cf090134b98756fafe084dddbcdba0ab00b5348ed48025195af3f1dda29e819bb66aa9d4d088050ff148482a";final SM2 sm2 = new SM2(null, ECKeyUtil.toSm2PublicParams(publicKeyHex));
sm2.usePlainEncoding();// true
boolean verify = sm2.verify(dataBytes, HexUtil.decodeHex(signHex));Copy to clipboardErrorCopied
在新版本的Hutool中,SM2的构造方法对这几类的密钥都做了兼容,即用户无需关注密钥类型:
摘要加密算法SM3
//结果为:136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
String digestHex = SmUtil.sm3("aaaaa");Copy to clipboardErrorCopied
对称加密SM4
String content = "test中文";
SymmetricCrypto sm4 = SmUtil.sm4();String encryptHex = sm4.encryptHex(content);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
JavaScript
Github https://github.com/JuneAndGreen/sm-crypto
切换到 dist
下载地址
https://github.com/JuneAndGreen/sm-crypto/blob/master/dist/sm3.js
sm3("123");
更多用法参见github
国产加密算法 SM3相关推荐
- 【国产加密算法-java实现SM3】
国产加密算法-java实现SM3 一.国产加密算法介绍 国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2).SM2.SM3.SM4.SM7.SM9.祖冲之密码算法(ZUC)那等等. 其 ...
- 一文带你学会国产加密算法SM4的vue实现方案
前言 上篇文章我们介绍了国产SM4加密算法的后端java实现方案.没有看过的小伙伴可以看一下这篇文章. https://blog.csdn.net/hanqing456/article/details ...
- 一文带你学会国产加密算法SM4的java实现方案
前言 今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密. 画重点!是SM4哦,不 ...
- 有没有大神知道国产加密算法SM2的详细介绍
最好是带有详细算法的,新手求解 转载于:https://www.cnblogs.com/wangzuerha/p/5412860.html
- 【JS 逆向百例】医保局 SM2+SM4 国产加密算法实战
关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 逆向过程 抓包分析 参数逆向 完整代码 JavaScript 加密关键 ...
- SM1 SM2 SM3 SM4加密算法
2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1.SM2.SM3 .SM4.SM7.SM9.ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指 ...
- 爬虫逆向基础,认识 SM1/SM2/SM3/SM4/SM7/SM9/ZUC 国密算法
文章目录 [01x00] 简介 [02x00]算法概述 [03x00]算法详解 [03x01]SM1 分组加密算法 [03x02]SM2 椭圆曲线公钥加密算法 [03x03]SM3 杂凑算法 [03x ...
- 最全加密算法(知识点梳理)
一.对称密钥和非对称密钥 对称密钥(共享密钥):DES,3DES,RC5,RC4,IDEA,AES 1.DES:明文分为64位一组,密钥64位(实际位是56位的密钥和8位奇偶校验位) 2.3DES:3 ...
- 信息安全工程师学习笔记《第三章》
第三章 密码学基本理论 本章讲述了密码学的基本概念以及常见的密码体制.密码算法,分析了杂凑函数.数字签名.国产密码算法.安全协议等的工作原理:本章还分析了密码在网络安全方面的应用场景类型. 3.1密码 ...
最新文章
- 子矩阵的最大累加和问题
- linux socket 详解
- Idea中内置Translation插件报“翻译错误”,解决方式!!!
- ios oc数组转换为c语言数组,iOS中将数组作为参数传递给服务器
- Android与Linux以及GNU的关系
- 数据拆分缺点和解决方案
- 阻塞/非阻塞/同步/异步方法和多线程的关系?没有任何关系,俩不挨着
- 把设备分享给每个Docker Container
- linux下反汇编命令,Linux命令学习手册-objdump命令
- 利用sklearn实现adaboost,以单一分类树为例
- 西门子V90电机数字量输出(DO)接倍福数字量输入模块
- 视频教程-毕业设计精品课之基于ASP.NET旅游网站源码实战讲解(带房屋互租模块)-.NET
- 金蝶KIS专业版本单据导入导出工具使用说明
- bitset java 源码_【JAVA】BitSet的源码研究
- matlab矩阵赋未知数,matlab设未知数
- php 下载excel文件,单独设置工作表(sheet1,sheet2,sheet3....)
- http url特殊字符转义
- 「镁客·请讲」VR的拓荒者,幻境视界让VR内容拥有艺术之美
- 立根铸魂 崛起数智时代 欧拉部署超300万套
- Python 写对联
热门文章
- 计算机网络dce接口命令,思科路由器里查看此接口是DCE还是DTE端的命令是什么?...
- 2D游戏案例:Unity答题系统(MySQL版)
- 干掉 IDEA:JetBrains 推出“下一代 IDE”轻量级开发工具 Fleet!
- Sec-WebSocket-Key
- 求救 VB6访问有多个反回参数的值
- 三星重组手机部门该如何应对中国手机的挑战?
- 微信小程序个人开发全过程
- 公考培训机构如何用自媒体短视频做招生?
- U盘怎么调整分区大小?u盘分区工具推荐
- ASPICE详细介绍-1.什么是ASPICE?