SHA-224摘要算法(带示例)

2024-08-28 03:32
文章标签 算法 示例 摘要 sha 224

本文主要是介绍SHA-224摘要算法(带示例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原创不易,转载请注明出处。

目录

1.算法简介

2.符号

3.加密算法流程

3.1 概述

3.2 填充

3.3 加密处理

附录A 运算示例

附录B 下载链接


1.算法简介

SHA英文全称Secure Hash Algorithm,即安全散列算法。散列算法又称杂凑算法或哈希算法,能将一定长度的消息计算出固定长度的字符串(又称消息摘要)。SHA包含5个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384和SHA-512,后四者并称为SHA-2。

SHA-224最大计算明文长度为2^64bit,属于分组算法,分组长度为512bit,产生的信息摘要长度为224bit。SHA-224算法属于密码杂凑算法,原则上不能通过密文推出明文。

本文将通过实例,详细介绍SHA-224加密算法的加密流程。

2.符号

下列符号适用于本文本。

h0~h7:8个32bit字,初始哈希值,也存放每组计算的当前哈希值

abcdefgh:8个32bit字,存放中间变量

m :消息

m':填充后的消息

mod:模运算

s0,s1:字节扩展时中间变量

S0,S1,ch,maj,temp1,temp2:循环迭代时中间变量

w[i]:第i个扩展字

∧:32bit与运算

∨:32bit或运算

⊕:异或运算

>>>k:循环右移k比特运算

>>k:右移k比特运算

←:左向赋值运算符

~:32bit字按位取反

3.加密算法流程

3.1 概述

对长度为l (l<2^64bit )比特的消息 ,SHA-224杂凑算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为224比特。

3.2 填充

假设消息 m的长度为 l比特。首先将比特“1”添加到消息的末尾,再添加 个k“0”,k 是满足 l+1+k=448mod512的最小的非负整数。然后再添加一个64位比特串,该比特串是长度l 的二进制表示。填充后的消息m' 的比特长度为512的倍数。

例如:对消息01100001 01100010 01100011,其长度 =24,经填充得到比特串:

                  

事实上,在编写程序时,应该先进行分组,对满足512bit的分组先进行计算。当分到最后一组不足512bit时,再进行填充。

3.3 加密处理

将填充后的消息m' 按512比特进行分组:m'=B0B1……Bn-1,其中n=(l+k+65)/512 。

3.3.1 常量及初始值

初始哈希值

h0= 0xc1059ed8

h1= 0x367cd507

h2= 0x3070dd17

h3= 0xf70e5939

h4= 0xffc00b31

h5= 0x68581511

h6= 0x64f98fa7

h7= 0xbefa4fa4

初始常量矩阵

k[0..63]=

0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,

0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,

0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,

0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,

0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,

0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,

0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,

0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,

0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,

0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,

0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,

0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,

0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,

0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,

0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,

0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

3.3.2 加密流程

每组数据按照如下流程进行加密操作:

1)分组数据按照32bit字存放在w[0]~w[15]中,然后按照如下规则扩展成64个字。注意 s0, s1 最后是右移, 不是循环右移

FOR i from 16 to 63

    s0= (w[i-15] ) >>> 7)⊕(w[i-15] >>> 18)⊕(w[i-15] >> 3)

    s1= (w[i-2] >>> 17)⊕(w[i-2] >>> 19)⊕(w[i-2] >> 10)

    w[i]= w[i-16] + s0 + w[i-7] + s1

ENDFOR

2)赋值初始哈希值

a= h0

b= h1

c= h2

d= h3

e= h4

f= h5

g= h6

h= h7

3)迭代计算64次

FOR i from 0 to 63

    S1= (e >>> 6) ⊕ (e >>> 11) ⊕ (e >>> 25)

    ch= (e∧ f) ⊕ ((~ e) ∧ g)

    temp1= h + S1 + ch + k[i] + w[i]

    S0= (a >>> 2) ⊕ (a >>> 13) ⊕ (a >>> 22)

    maj= (a∧b) ⊕ (a∧c)⊕(b∧c)

    temp2= S0 + maj

 

    h= g

    g= f

    f= e

    e= d + temp1

    d= c

    c= b

    b= a

    a= temp1 + temp2

ENDFOR

4)获取当前哈希值

h0= h0 + a

h1= h1 + b

h2= h2 + c

h3= h3 + d

h4= h4 + e

h5= h5 + f

h6= h6 + g

h7= h7 + h

注意前一组得到的哈希值h0~h7作为下一分组的初始值,最终取h0~h6224bit作为杂凑值。

附录A 运算示例

原始输入消息:

abc

填充后消息:

0x61      0x62      0x63      0x80      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x00

0x00      0x00      0x00      0x00      0x00      0x00      0x00      0x18

64个扩展字

w[0]~w[3]:  0x61626380    0x00000000        0x00000000        0x00000000

w[4]~w[7]:  0x00000000    0x00000000        0x00000000        0x00000000

w[8]~w[11]: 0x00000000    0x00000000        0x00000000        0x00000000

w[12]~w[15]:0x00000000    0x00000000        0x00000000        0x00000018

w[16]~w[19]:0x61626380    0x000f0000         0x7da86405        0x600003c6

w[20]~w[23]:0x3e9d7b78    0x0183fc00         0x12dcbfdb        0xe2e2c38e

w[24]~w[27]:0xc8215c1a     0xb73679a2        0xe5bc3909         0x32663c5b

w[28]~w[31]:0x9d209d67   0xec8726cb         0x702138a4        0xd3b7973b

w[32]~w[35]:0x93f5997f     0x3b68ba73        0xaff4ffc1           0xf10a5c62

w[36]~w[39]:0x0a8b3996    0x72af830a         0x9409e33e         0x24641522

w[40]~w[43]:0x9f47bf94     0xf0a64f5a          0x3e246a79         0x27333ba3

w[44]~w[47]:0x0c4763f2     0x840abf27         0x7a290d5d        0x065c43da

w[48]~w[51]:0xfb3e89cb     0xcc7617db        0xb9e66c34         0xa9993667

w[52]~w[55]:0x84badedd    0xc21462bc         0x1487472c        0xb20f7a99

w[56]~w[59]:0xef57b9cd     0xebe6b238         0x9fe3095e         0x78bc8d4b

w[60]~w[63]:0xa43fcf15     0x668b2ff8         0xeeaba2cc          0x12b1edeb

64轮迭代(十六进制表示)

A

B

c

d

e

f

g

h

0

c1059ed8

367cd507

3070dd17

f70e5939

ffc00b31

68581511

64f98fa7

befa4fa4

1

0e96b2da

c1059ed8

367cd507

3070dd17

0434225e

ffc00b31

68581511

64f98fa7

2

c20dab6b

0e96b2da

c1059ed8

367cd507

9cab416f

0434225e

ffc00b31

68581511

3

ab113b7a

c20dab6b

0e96b2da

c1059ed8

82177fe8

9cab416f

0434225e

ffc00b31

4

8253cc1a

ab113b7a

c20dab6b

0e96b2da

8346b27d

82177fe8

9cab416f

0434225e

5

08a0dc0c

8253cc1a

ab113b7a

c20dab6b

05b557db

8346b27d

82177fe8

9cab416f

6

b2ca3a91

08a0dc0c

8253cc1a

ab113b7a

898dc7bb

05b557db

8346b27d

82177fe8

7

0b6b9023

b2ca3a91

08a0dc0c

8253cc1a

a2e49147

898dc7bb

05b557db

8346b27d

8

f09d116d

0b6b9023

b2ca3a91

08a0dc0c

7a84120d

a2e49147

898dc7bb

05b557db

9

ed6fa633

f09d116d

0b6b9023

b2ca3a91

c037faad

7a84120d

a2e49147

898dc7bb

10

55e6a367

ed6fa633

f09d116d

0b6b9023

aae50091

c037faad

7a84120d

a2e49147

11

0817e82b

55e6a367

ed6fa633

f09d116d

c8c53a2c

aae50091

c037faad

7a84120d

12

17142334

0817e82b

55e6a367

ed6fa633

dd4c7be9

c8c53a2c

aae50091

c037faad

13

fc4f023e

17142334

0817e82b

55e6a367

87bea51a

dd4c7be9

c8c53a2c

aae50091

14

be316902

fc4f023e

17142334

0817e82b

65141125

87bea51a

dd4c7be9

c8c53a2c

15

1d80d178

be316902

fc4f023e

17142334

4545f53a

65141125

87bea51a

dd4c7be9

16

9f341a45

1d80d178

be316902

fc4f023e

6a61c411

4545f53a

65141125

87bea51a

17

0f324db9

9f341a45

1d80d178

be316902

06c80d6a

6a61c411

4545f53a

65141125

18

ffe7012b

0f324db9

9f341a45

1d80d178

b7b601f4

06c80d6a

6a61c411

4545f53a

19

62932ab8

ffe7012b

0f324db9

9f341a45

763b627a

b7b601f4

06c80d6a

6a61c411

20

5207d867

62932ab8

ffe7012b

0f324db9

7fbba936

763b627a

b7b601f4

06c80d6a

21

07d55ccb

5207d867

62932ab8

ffe7012b

9ba5a6ea

7fbba936

763b627a

b7b601f4

22

dece98a4

07d55ccb

5207d867

62932ab8

293ffb5d

9ba5a6ea

7fbba936

763b627a

23

e62a812e

dece98a4

07d55ccb

5207d867

28fe0fd9

293ffb5d

9ba5a6ea

7fbba936

24

57206fb8

e62a812e

dece98a4

07d55ccb

c76084ea

28fe0fd9

293ffb5d

9ba5a6ea

25

6a6abcf0

57206fb8

e62a812e

dece98a4

b2614c5e

c76084ea

28fe0fd9

293ffb5d

26

937514f0

6a6abcf0

57206fb8

e62a812e

b42ec21c

b2614c5e

c76084ea

28fe0fd9

27

82af3ffb

937514f0

6a6abcf0

57206fb8

be6f6760

b42ec21c

b2614c5e

c76084ea

28

eca3bcd5

82af3ffb

937514f0

6a6abcf0

1dccbb10

be6f6760

b42ec21c

b2614c5e

29

2d1576c4

eca3bcd5

82af3ffb

937514f0

01641929

1dccbb10

be6f6760

b42ec21c

30

fe3c8658

2d1576c4

eca3bcd5

82af3ffb

fc4b36c5

01641929

1dccbb10

be6f6760

31

0d7cce07

fe3c8658

2d1576c4

eca3bcd5

a4a4a3a4

fc4b36c5

01641929

1dccbb10

32

cce1951d

0d7cce07

fe3c8658

2d1576c4

4be9475c

a4a4a3a4

fc4b36c5

01641929

33

09b76257

cce1951d

0d7cce07

fe3c8658

0ccddd86

4be9475c

a4a4a3a4

fc4b36c5

34

f827767e

09b76257

cce1951d

0d7cce07

db116db7

0ccddd86

4be9475c

a4a4a3a4

35

e4a0bb48

f827767e

09b76257

cce1951d

994e2bac

db116db7

0ccddd86

4be9475c

36

d8bb1041

e4a0bb48

f827767e

09b76257

5b730abb

994e2bac

db116db7

0ccddd86

37

2a2e32f4

d8bb1041

e4a0bb48

f827767e

22e15c59

5b730abb

994e2bac

db116db7

38

0d275ca8

2a2e32f4

d8bb1041

e4a0bb48

f6c39382

22e15c59

5b730abb

994e2bac

39

7902369c

0d275ca8

2a2e32f4

d8bb1041

d9f8c2e0

f6c39382

22e15c59

5b730abb

40

f3c80288

7902369c

0d275ca8

2a2e32f4

00e3a7bb

d9f8c2e0

f6c39382

22e15c59

41

483bba4d

f3c80288

7902369c

0d275ca8

f0a8198c

00e3a7bb

d9f8c2e0

f6c39382

42

d75d4d26

483bba4d

f3c80288

7902369c

fcecdcd4

f0a8198c

00e3a7bb

d9f8c2e0

43

0744b618

d75d4d26

483bba4d

f3c80288

03186faa

fcecdcd4

f0a8198c

00e3a7bb

44

9cce9f01

0744b618

d75d4d26

483bba4d

a56f6bbf

03186faa

fcecdcd4

f0a8198c

45

a3701bd9

9cce9f01

0744b618

d75d4d26

af1bef5f

a56f6bbf

03186faa

fcecdcd4

46

131d4c09

a3701bd9

9cce9f01

0744b618

ecb77e1b

af1bef5f

a56f6bbf

03186faa

47

fb3777d9

131d4c09

a3701bd9

9cce9f01

1d601f44

ecb77e1b

af1bef5f

a56f6bbf

48

847ea00e

fb3777d9

131d4c09

a3701bd9

503a7b95

1d601f44

ecb77e1b

af1bef5f

49

aaa69347

847ea00e

fb3777d9

131d4c09

5eeb9930

503a7b95

1d601f44

ecb77e1b

50

505caf28

aaa69347

847ea00e

fb3777d9

ce695893

5eeb9930

503a7b95

1d601f44

51

675e0b02

505caf28

aaa69347

847ea00e

c22dd75f

ce695893

5eeb9930

503a7b95

52

abd26099

675e0b02

505caf28

aaa69347

1409c3f8

c22dd75f

ce695893

5eeb9930

53

0df9857a

abd26099

675e0b02

505caf28

2d864d9f

1409c3f8

c22dd75f

ce695893

54

308b8799

0df9857a

abd26099

675e0b02

02524f02

2d864d9f

1409c3f8

c22dd75f

55

909cc059

308b8799

0df9857a

abd26099

6f2a444a

02524f02

2d864d9f

1409c3f8

56

8d25bd94

909cc059

308b8799

0df9857a

1273c622

6f2a444a

02524f02

2d864d9f

57

f32141da

8d25bd94

909cc059

308b8799

1771ed3f

1273c622

6f2a444a

02524f02

58

8ce24395

f32141da

8d25bd94

909cc059

f52f66a6

1771ed3f

1273c622

6f2a444a

59

07bcd846

8ce24395

f32141da

8d25bd94

149db547

f52f66a6

1771ed3f

1273c622

60

622d5e5b

07bcd846

8ce24395

f32141da

b6f4c630

149db547

f52f66a6

1771ed3f

61

c693fc7a

622d5e5b

07bcd846

8ce24395

13dfb889

b6f4c630

149db547

f52f66a6

62

55d1c760

c693fc7a

622d5e5b

07bcd846

7e730e00

13dfb889

b6f4c630

149db547

63

fd89031b

55d1c760

c693fc7a

622d5e5b

55489ee6

7e730e00

13dfb889

b6f4c630

64

6203de4a

fd89031b

55d1c760

c693fc7a

2aedb1b3

55489ee6

7e730e00

13dfb889

杂凑值h0~h6

h0:0x23097d22

h1:0x3405d822

h2:0x8642a477

h3:0xbda255b3

h4:0x2aadbce4

h5:0xbda0b3f7

h6:0xe36c9da7

附录B 下载链接

https://download.csdn.net/download/u013073067/13138360

编译环境:VS2010

语言:C

参考文献:

[1]https://en.wikipedia.org/wiki/Secure_Hash_Algorithms

这篇关于SHA-224摘要算法(带示例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113601

相关文章

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏