文章目录
- 一、哈希函数 SHA256 是什么 ?
- 二、为什么需要 消息摘要 (SHA256)?
- 三、消息摘要 基本原理
- 1、常量初始化
- 2、信息预处理
- 3、逻辑运算
- 4、消息摘要
- 四、信息摘要 应用
- 1、简单应用
- 2、项目应用
一、哈希函数 SHA256 是什么 ?
SHA256 是一个哈希函数。哈希函数,又称散列算法,是一种从任何一种数据中创建小的数字 “指纹” 的方法。
散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(哈希值)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。
对于任意长度的消息,SHA256 都会产生一个 256bit 长的哈希值,称作消息摘要。
二、为什么需要 消息摘要 (SHA256)?
一个 n 位的哈希函数就是一个从任意长的消息到 n 位哈希值的映射,一个 n 位的加密哈希函数就是一个单向的、避免碰撞的 n 位哈希函数。这样的函数是目前在数字签名和密码保护当中极为重要的手段。
各种加密算法在实现区块链当中的各个环节都有着不可替代的作用。在比特币挖矿 以及 merkle 树 当中被大量使用的就是 SHA256。
三、消息摘要 基本原理
要完成消息摘要计算,先通过三个模块:常量的初始化、信息预处理、逻辑运算
1、常量初始化
算法中用到两部分 数据:8个哈希初值、64个哈希常量
(1)SHA256 算法中 8个哈希初值
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19
这些初值是对自然数中前 8 个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前 32bit 而来。
sqrt{2} 小数部分约为 0.414213562373095048,而
0.414213562373095048 ≈ 6 ∗ 1 6 ^(− 1) + a ∗ 1 6 ^(− 2) + 0 ∗ 1 6 ^(− 3) + . . .
于是,质数 2 的平方根的小数部分取前 32bit 就对应出了0x6a09e667
(2)SHA256 算法中 64 个常量
428a2f98 71374491 b5c0fbcf e9b5dba5
3956c25b 59f111f1 923f82a4 ab1c5ed5
d807aa98 12835b01 243185be