首页 > 编程语言 >SHA与SM3算法简介

SHA与SM3算法简介

时间:2022-11-08 06:33:05浏览次数:50  
标签:填充 H2 简介 SM3 SHA 消息 哈希 512

一、SHA-224和SHA-256算法原理

协议标准:https://csrc.nist.gov/CSRC/media/Publications/fips/180/2/archive/2002-08-01/documents/fips180-2withchangenotice.pdf

算法处理分如下几步:

 

 

消息填充
消息填充分为两部分:第一部分是附加填充比特,第二部分是附加长度,目的是让整个消息满足指定的结构,从而处理起来可以统一化、格式化。

附加填充比特:指在消息尾部进行填充,使报文长度在对512取模后的余数为448。具体操作是:先被1比特1,然后都被0,直到满足对512取模余448。需要注意的是:即使原始消息长度已经满足对512取模余448,补位也需要进行,这时地填充512比特。所以附加填充时至少补1位,最多补512位。

附加长度:将原始数据的长度信息补到已经进行了填充的消息后面。

消息分组
消息分组指将消息填充后的数据按512bit(16*32bit)进行分组,并扩充为64*32bit,扩充算法如下:

当 0 ≤ t ≤ 15 时,W[t] = M[t],M[t]为512bit原始数据中第t个32bit数据。

当 16 ≤ t ≤ 63时,W[t] = W[t-7] + (W[t-2] >>> 17) ⊕ (W[t-2] >>> 19) ⊕ (W[t-2] >> 10) + \

W[t-16] + (W[t-15] >>> 7) ⊕ (W[t-15] >>> 18) ⊕ (W[t-15] >> 3)

消息填充和消息分组处理图示如下:

 

 

 

迭代运算
SHA-224/SHA-256算法对输入的消息进行64轮迭代运算,分别输出224bit和256bit的HASH结果。

 

 

 

SHA-224/SHA-256处理过程中会用到8个哈希初值和64个哈希常量。

SHA-224/SHA-256的8个哈希初值分别为:

SHA-224:

A=0xC1059ED8,B=0x367CD507,C=0x3070DD17,D=0xF70E5939

E=0xFFC00B31,F=0x68581511,G=0x64F98FA7,H=0xBEFA4FA4

SHA-256:

A=0x6A09E667,B=0xBB67AE85,C=0x3C6EF372,D=0xA54FF53A

E=0x510E527F,F=0x9B05688C,G=0x1F83D9AB,H=0x5BE0CD19

64个哈希常量:

 

 

SHA-224/256迭代运算的详细流程为:

1. 哈希初值赋值:

H0=A,H1=B,H2=C,H3=D,H4=E,H5=F,H6=G,H7=H

2. 64轮迭代运算

for (t=0; t≤63; t++)

{

T1 = H + (E >>> 6) ⊕ (E >>> 11) ⊕ (E >>>25) + (E & F) ⊕ (~E & G) + K[t] + W[t]

T2 = (A >>> 2) ⊕ (A >>> 13) ⊕ (A >>>22) + (A & B) ⊕ (A & C) ⊕ (B & C)

H = G;

G = F;

F = E;

E = D + T1;

D = C;

C = B;

B = A;

A = T1 + T2;

}

3. 结果输出

SHA-224输出224bit:

H0=H0+A,H1=H1+B,H2=H2+C,H3=H3+D,H4=H4+E,H5=H5+F,H6=H6+G

SHA-256输出256bit:

H0=H0+A,H1=H1+B,H2=H2+C,H3=H3+D,H4=H4+E,H5=H5+F,H6=H6+G,H7=H7+H
————————————————
版权声明:本文为CSDN博主「j64993」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/j64993/article/details/127132255

 

 

二、SM3算法原理

协议标准:http://www.sca.gov.cn/sca/xxgk/2010-12/17/1002389/files/302a3ada057c4a73830536d03e683110.pdf

算法处理分如下几步:

 

 

 

消息填充
消息填充分为两部分:第一部分是附加填充比特,第二部分是附加长度,目的是让整个消息满足指定的结构,从而处理起来可以统一化、格式化。

附加填充比特:指在消息尾部进行填充,使报文长度在对512取模后的余数为448。具体操作是:先被1比特1,然后都被0,直到满足对512取模余448。需要注意的是:即使原始消息长度已经满足对512取模余448,补位也需要进行,这时地填充512比特。所以附加填充时至少补1位,最多补512位。

附加长度:将原始数据的长度信息补到已经进行了填充的消息后面。

消息分组
消息分组指将消息填充后的数据按512bit(16*32bit)进行分组,并扩充为132*32bit,扩充算法如下:

当 0 ≤ t ≤ 15 时,W[t] = M[t],M[t]为512bit原始数据中第t个32bit数据。

当 16 ≤ t ≤ 67时,P1(X) = X ⊕ (X <<< 15) ⊕ (X <<< 23)

W[t] = P1(W[t-16] ⊕ W[t-9] ⊕ (W[t-3] <<< 15)) ⊕ (W[t-13] <<< 7) ⊕ W[t-6]

当 68 ≤ t ≤ 131时,W'[i] = W[i] ⊕ W[i+4],其中i=0..63

消息填充和消息分组处理图示如下:

 

 

 

迭代运算
SM3算法对输入的消息进行64轮迭代运算,输出256bit的HASH结果。

 

 

 

SM3处理过程中会用到8个哈希初值和2个哈希常量。

SM3的8个哈希初值分别为:

A=0x7380166F,B=0x4914B2B9,C=0x172442D7,D=0xDA8A0600

E=0xA96F30BC,F=0x163138AA,G=0xE38DEE4D,H=0xB0FB0E4E

2个哈希常量:

0≤

标签:填充,H2,简介,SM3,SHA,消息,哈希,512
From: https://www.cnblogs.com/Eleven-Liu/p/16868068.html

相关文章

  • CSharp: Classes, Structures, And Records in c# 10(donet 6)
     #regionRecordTypesRecordClassinC#10///<summary>///Positionalparameterssyntax///位置参数的语法///</summary>///<pa......
  • Open Cascade 7.7.0 新功能:BRepLib_PointCloudShape
    ​ 1.简介OCC官方在2022年10月3日发布7.7Beta版,并于今天2022年11月7日正式发布OpenCascade7.7.0版本,其中一个更新为:一个用于生成拓扑模型上的点集的工具方法。......
  • Java开发学习(四十)----MyBatisPlus入门案例与简介
    一、入门案例MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率。SpringBoot它能快速构建Spring开发环境用以整合其他技术,使用起来是......
  • Streamlit 简介
    Streamlit是第一个专门针对机器学习和数据科学团队的应用开发框架,它是开发自定义机器学习工具的最快的方法,你可以认为它的目标是取代Flask在机器学习项目中的地位,可以帮助......
  • mac使用sha256sum
    下载coreutilsbrewinstallcoreutils然后安装完成之后配置环境变量,打开zshrcsubl~/.zshrc添加下面内容exportPATH="/usr/local/opt/coreutils/libexec/gnubin:$......
  • ClickHouse 表引擎简介(一)
    1、表引擎介绍ClickHouse表引擎是ClickHouse的一大特色。可以说, 表引擎决定了如何存储表的数据。包括:数据的存储方式和位置,写到哪里以及从哪里读取数据。支持哪些查询......
  • SWIG:SWIG的简介、安装、使用方法之详细攻略
    SWIG:SWIG的简介、安装、使用方法之详细攻略一个处女座的程序猿于2019-12-1610:57:12发布14957收藏58分类专栏:Tool/IDEetc版权Tool/IDEetc专栏收录该内容72篇......
  • 记录因Sharding Jdbc批量操作引发的一次fullGC
    周五晚上告警群突然收到了一条告警消息,点开一看,应用fullGC了。于是赶紧联系运维下载堆内存快照,进行分析。内存分析使用MemoryAnalyzer打开堆文件mat下载地址:htt......
  • Web前端技术简介
    Web前端就是1美工photoshop、css2界面友好(比如京东=,你购物以后的关联产品是放在左边还是右边呢?)3强大的脚本功能支持(QQ空间,上传照片,重新部署......
  • 汽车常识之动力系统简介
    前言在人生的道路上,从来没有全身而退,坐享其成,不劳而获一说。你不努力,就得出局。一、动力系统简介是给汽车提供驱动力的总要部件;包含发动机、电动机、发电机、动力电池......