目录一、简介二、算法原理1.填充2.迭代压缩2.1迭代过程2.2消息扩展2.3压缩函数3.得到杂凑值三、代码实现1.常量定义1.1初始化的IV1.2常量T1.3布尔函数1.4置换函数1.5其它常量2.初始化3.update方法4.压缩函数方法5.final方法四、测试一、简介国密SM3算法是我国自研设计的商用密码杂凑算法,是在SHA-256的基础上进行改造的,其安全性与SHA-256相当。《SM3密码杂凑算法》于2010年12月份由国家密码管理局首次发布。后于2012年发布为密码行业标准《GM/T0004-2012SM3密码杂凑算法》,2016年发布为国家密码杂凑算法标准《GB/T32905-
一.基本概念SM3密码杂凑算法用于商用密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。1.1术语与定义1.1.1消息(message)任意有限长度的比特串。本文文中的消息作为杂凑算法的输入数据。1.1.2杂凑值(hashvalue)杂凑算法作用于消息后输出的特定长度的比特串。本文文中的杂凑值长度为256比特。1.1.3字(word)长度为32的比特长度1.1.4初始值IV=7380166f4914b2b9172442d7da8a0600a96f30bc163138aae38dee4db0fb0e4e1.1.5常量Tj=79cc45190≤j≤1
在了解SM3算法之前,我们有必要了解一下单向散列函数。1.单向散列函数单向散列函数(one-wayhashfunction)有很多名字:压缩函数、收缩函数、消息摘要、指纹、密码校验和、信息完整性检验(MessageIntegrityCheck,MIC)、操作检验码(ManipulationDetectionCode,MDC)。不管你怎么叫,它都是现代密码学的中心。单向散列函数是许多协议的另一个结构模块。散列函数长期以来一直在计算机科学中使用,无论从数学或其他角度看,散列函数就是把可变长度输入串(叫做预映射,pre-image)转换成固定长度(经常更短)输出串(叫做散列值,hashvalue)的