国密算法(SM3)java语言的实现:利用bcprov和huttol库来实现SM3算法,国产哈希算法
SM3简介:
- SM3是国产哈希算法
- SM3采用的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。相关标准为“GM/T 0004-2012 《SM3密码杂凑算法》”。
- 在商用密码体系中,SM3主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。
- 据国家密码管理局表示,其安全性及效率与SHA-256相当。
- 消息和摘要:散列函数的输入数据,通常被称为消息(message);而它的输出结果,经常被称为消息摘要(message digest)或摘要(digest)。
密码散列函数的特点:
一个理想的密码散列函数应该有四个主要的特性:
- 对于任何一个给定的消息,它都很容易就能运算出散列数值。
- 难以由一个已知的散列数值,去推算出原始的消息。
- 在不更动散列数值的前提下,修改消息内容是不可行的。
- 对于两个不同的消息,它不能给与相同的散列数值。
SM3的工具类的实现:
可以使用bcprov和hutool两个库来分别实现。
包的引入(pom文件):
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.64</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.5</version></dependency>
代码:
Sm3Tools.java:
package com.abc.smutilstest;import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;import java.io.UnsupportedEncodingException;
import cn.hutool.crypto.SmUtil;/*** SM3算法工具类*/
public class Sm3Tools {/*** sm3加密* @param text: 要加密的文本*/public static void Sm3EncryptByHutool(String text){String sm3 = SmUtil.sm3(text);System.out.println("[Sm3EncryptByHutool] hex:" + sm3);}/*** SM3加密* @param content 要加密的内容*/public static String Sm3EncryptText(String content) throws UnsupportedEncodingException {byte[] bytes = content.getBytes();byte[] hash = hash(bytes);String sm3 = ByteUtils.toHexString(hash);System.out.println("[Sm3EncryptText]sm3 hex:" + sm3);return sm3;}public static byte[] hash(byte[] srcData){SM3Digest digest=new SM3Digest();digest.update(srcData,0,srcData.length);byte[] bytes = new byte[digest.getDigestSize()];digest.doFinal(bytes,0);return bytes;}/*** 主函数* @param args*/public static void main(String[] args) throws UnsupportedEncodingException {Sm3EncryptByHutool("abc");Sm3EncryptText("abc");}}
测试结果:
[Sm3EncryptByHutool] hex:66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
[Sm3EncryptText]sm3 hex:66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0
总结:
- SM3适用场景:SM3密码杂凑(哈希、散列)算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在SM2,SM9标准中使用。
- SM3算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的杂凑值,其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过程,消息扩展和压缩函数所构成。
国密算法(SM3)java语言的实现:利用bcprov和huttol库来实现SM3算法,国产哈希算法相关推荐
- java语言程序设计全国考试题,2019年12月全国计算机等级考试[Java语言程序设计]复习题及答案...
  [导读]:2019年12月全国计算机等级考试[Java语言程序设计]复习题及答案,更多全国等级考试报名时间.考试时间以及考试模拟试题 ,请访问易考吧全国等级考试栏目 ...
- SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库)
SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库) 实验环境 预备知识 FpF_pFp 及椭圆曲线 素域 FpF_pFp FpF_pFp 上的椭圆曲线 FpF_pFp 上椭圆 ...
- 国密算法java语言的实现:利用bcprov和hutool库分别实现国密SM4算法工具类,对称密钥
SM4算法成为行业标准: SM4分组密码算法是2012年3月21日实施的一项行业标准: 2021年6月25日,我国SM4分组密码算法作为国际标准ISO/IEC 18033-3:2010/AMD1:20 ...
- 国产哈希算法WJLHA(一):开源与应用
一.哈希算法现状 目前常见的Hash算法有MD5.SHA.MAC.CRC等.MD5信息摘要算法(MD5 Message-Digest Algorithm)[1],一种被广泛使用的密码散列算法,可以产生 ...
- 3. ackerman函数的递归实现算法用java语言_ackerman递归
定义: n+1 n=0 A(m,n)={A(m-1,1) m=0 A(m-1,A(m,n-1)) n>0,m>0 #include #include using namesp ...
- 匈牙利算法的Java语言实现
匈牙利算法的一个重要概念是增广路径,具体思路是对于图的每个顶点都寻找其增广路径,然后将其加入匹配顶点当中,而对于每个顶点A寻找增广路径的过程中,如果另一个顶点B和顶点A有连接且在此轮循环中没有被访问过 ...
- 3. ackerman函数的递归实现算法用java语言_ackerman函数递归算法
5-2 已知 Ackerman 函 5-1 已知 A[n]为整数数组,试写出实现下列运算的递归算法: (1) 求数组 A 中的最大整数. (2) 求 n 个整数的和. (3) 求 n...... 2 ...
- android 国密签名,关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的...
国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4和最新的sm9.在国内环境主要使用的国家密码局认定的算法. SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法, ...
- 国密加密算法 java 开源_Hyperledger Fabric 国密改造项目介绍
引言 密码学是区块链实施中最重要的组成部分之一.然而,每个国家都有自己的国家加密算法,因此,在实施联盟链方案時支持国密算法尤其重要.Hyperledger Fabric在包括中国在内的世界范围内得到广 ...
最新文章
- iOS 解决1。返回时的黑边问题、2。controller的抖动问题
- 基于图像的三维物体重建:在深度学习时代的最新技术和趋势综述之训练
- pandas使用str函数和contains函数查看dataframe特定数据列中是否匹配或包含特定模式的字符串(match or contain a pattern in column value)
- ceph-deploy mod add_我的世界基座(Pedestals)Mod
- Java黑皮书课后题第9章:*9.6(秒表)设计一个名为StopWatch的类,该类包含……。编写一个测试程序,用于测量使用选择排序对100000个数字进行排序的执行时间
- java中final的意义
- 最小代价(区间dp)(ybtoj)
- 操作系统(三)内存管理
- ASP.NET生成静态页面方法大全(2)
- linux 网口名称变了_CentOS7修改网卡名称为eth0及一些基本设置
- 风控算法知识——WOE值的深度理解与应用
- 4、elasticsearch安装head插件
- foobar2000 for mac(经典音乐播放器)
- 使用sm2签名并验签efi文件
- 32位win10服务器系统,微软将停止支持32位Win10系统 32位Win10系统什么时候停止支持...
- cobar mysql部署方案_阿里巴巴分布式数据库解决方案——Cobar中间件配置详解 (转)...
- excel冻结窗口_excel怎么冻结窗口?excel冻结窗口怎么设置?
- 腾讯云网站备案咨询:网站信息类问题汇总解答
- 微信公众平台开发实例 php,php微信公众平台开发类实例,php公众平台实例_PHP教程...
- 我们真的需要智能路由器?
热门文章
- oracle按年同比环比,oracle求同比,环比函数(LAG与LEAD)的详解
- 欧拉函数性质证明 : n所有约数的欧拉函数和等于n
- org.mapstruct.Mapper
- Scanner文本扫描器
- 2022年1月5日【Jiawei_Z】昆仑通态 配方组态 设计---查询/保存/编辑/导入/导出
- 双非二战一志愿上岸国科大杭州高等研究院经验
- Maven编译失败: zip file is empty
- 【逻辑】【java基础】查询逻辑 【实用】
- 腾讯地图行政区划接口调用
- Spring——spring单例模式的线程安全