协议标准: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个哈希常量:

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

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

HASH和HMAC(4):SHA-224和SHA-256算法原理相关推荐

  1. HASH和HMAC(5):SHA-384、SHA-512、SHA-512/224和SHA-512/256算法原理

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

  2. 【转】HMAC哈希消息认证码及算法原理

    HMAC算法原理 HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的.它要求通信双方共享密钥.约定算法.对报文进行Hash运算,形成固定长度的认证码.通信双方 ...

  3. HASH和HMAC(7):SHA3-224/256/384/512算法原理

    协议标准:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf SHA3的算法处理类似于SHA1/2,整个处理过程可归纳为: 消息填充和消息 ...

  4. SHA 256算法是什么?哈希算法有哪些特点,主要应用在哪里?

    无论数字证书品牌.价格和类型如何,所有SSL证书的通用规范是采用SHA 256算法,您可以在证书详细信息或产品信息中列出的功能中看到.对于非技术人员来说,SHA 256 算法通常是个谜,但是锐成信息将 ...

  5. HASH和HMAC(1):HASH和HMAC概述

    HASH(哈希)函数是信息安全中一个非常重要的工具,它对一个任意长度的消息m施加运算,返回一个固定长度的HASH值h(m),HASH函数h是公开的,对处理过程不用保密.HASH值又被称为哈希值.杂凑值 ...

  6. SHA算法原理与常用实现

    看本文前,最好先看看之前的这一篇关于MD5算法的介绍. MD5算法原理与常用实现 本文目录 定义 MD5和SHA-1的碰撞问题 常见应用场景 1.类似MD5的应用场景 2.比特币 3.https签名算 ...

  7. Java算法之 一致性hash算法原理及实现

    为什么80%的码农都做不了架构师?>>>    一致性hash算法原理及实现 转载于:https://my.oschina.net/90888/blog/1645131

  8. 一致性 Hash 算法原理总结

    一致性 Hash 算法是解决分布式缓存等问题的一种算法,本文介绍了一致性 Hash 算法的原理,并给出了一种实现和实际运用的案例: 一致性 Hash 算法背景 考虑这么一种场景: 我们有三台缓存服务器 ...

  9. HASH和HMAC(8):HMAC算法原理

    HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,在1997发布的RFC2104中被公布.它可以与任何迭代HASH函数(SH ...

  10. HASH和HMAC(3):SHA-1算法原理

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

最新文章

  1. Please do not register multiple Pages in pages/buildhelp/buildhelp.js
  2. Java客户端访问HBase集群解决方案(优化)
  3. java字符生成器_Java实现简单字符生成器代码例子
  4. oracle安装及使用常见错误
  5. echart 饼图设置指引线_表示整体和部分的条饼图,走起!|Excel144
  6. urllib2.urlopen超时问题
  7. 走进英特尔中国研究院探索创新日:发布最新科研成果与创新策略
  8. 如何使用Docker轻松设置Ruby on Rails开发环境
  9. 天津农学院计算机考研专业,2021年天津农学院计算机与信息工程学院考研专业目录_研究生考试范围 - 学途吧...
  10. 装完机,启grub+Linux,linux一路填坑...
  11. puml绘制思维导图_定制工作计划有哪些操作,4款工作思维导图模板助你效率蹭蹭上涨...
  12. linux模块builtin是什么意思,Linux命令手册
  13. 服务器远程桌面一直正在配置,关于远程桌面一直显示正在配置远程会话
  14. win10 系统 程序员计算器面板介绍和功能使用
  15. python教师管理系统,Python面向对象实战:学生教师信息管理(3)
  16. 图像迁移风格保存模型_图像风格迁移原理
  17. 计算机审计取证方法,审计技术方法有几种
  18. linux rm 文件找回_Linux下用rm删除的文件的恢复方法
  19. 关于Web 验证方法你知道几种
  20. matlab零序五次谐波,基于5次谐波的小电流接地系统故障选线方法仿真与分析.docx...

热门文章

  1. Java面试基础知识II
  2. Linux 查看tomcat占用的端口号
  3. 操作系统 第五章虚拟器存储器(自我总结式)
  4. 市净率|介绍|解释|计算方法
  5. Unity之JSON(数据存储)
  6. HashMap源码阅读笔记
  7. 2、java的应用领域
  8. 邓凡平:技术探讨之请教方舟编译器的十个问题
  9. Flutter集成个推推送-安卓原生篇
  10. 数控车椭圆编程实例带图_数控车床加工椭圆的宏程序实例