SHA-256算法

SHA-256算法

Falcon

2025-04-26 发布49 浏览 · 0 点赞 · 0 收藏

哈希算法 (Hash Functions)

哈希算法将输入数据(如文件或消息)转换为固定长度的散列值。其数学基础涉及有限域运算、布尔代数和加密原语。值得注意的是,哈希算法并非加密算法,它具有单向性,也就是说无法从哈希值反推出原始数据。不过,可以使用暴力破解的方式来尝试找到能生成相同哈希值的原始数据。

  • 常见算法:

  • SHA-256 (Secure Hash Algorithm 256-bit):

  • 数学基础:SHA系列算法基于Merkle-Damgård结构,使用布尔运算和消息扩展函数,设计时考虑抗碰撞攻击。

  • 应用:常用于数据完整性校验、数字签名和区块链中的工作量证明(PoW)机制。

  • MD5 (Message Digest Algorithm 5):

  • 数学基础:与SHA类似,MD5使用迭代和置换操作将消息压缩为128位的散列值。

  • 应用:尽管已不再安全,MD5曾广泛用于数据验证和文件校验。

  • 优点:

  • 散列值固定,无法从散列值反推出原始数据。

  • 常用于数据完整性检查。

  • 缺点:

  • 哈希算法存在碰撞风险:两个不同输入可能产生相同的哈希值。

  • 一些算法(如MD5)已经被证明不再安全。

SHA算法

SHA(Secure Hash Algorithm)是由美国国家安全局(NSA)设计的哈希函数族。SHA算法通过对输入数据进行哈希计算,生成固定长度的哈希值,广泛应用于数字签名、信息完整性验证等领域。SHA算法的安全性依赖于输入的长度和处理速度。

# SHA家族的算法

SHA算法家族包含多个不同的版本,主要包括SHA-0、SHA-1、SHA-2和SHA-3系列。每种算法的特点和安全性各不相同。

#SHA256原理

  • 数据填充

在消息末尾添加一个1位的比特。

然后添加若干个0位,直到消息的长度接近512的倍数。

最后,消息的长度(以比特为单位)以64位二进制形式追加到消息的末尾。

假设我们有一个消息"abc",其长度为3字节(24比特)。我们来详细计算这个消息如何填充至512位。

a= 01100001

b= 01100010

c= 01100011

原始数据:(a)01100001/(b)01100010/(c)01100011

01100001/01100010/01100011/1 ——尾端添1

01100001/01100010/01100011/1[0...0] (423个0)
使消息填充到448位

01100001/01100010/01100011/1[0...0](423个0)
尾端加64位长度字段:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011000

  • 初始化哈希值

SHA-256 的标准初始哈希值(十六进制表示):

H0 =0x6a09e667

H1 =0xbb67ae85

H2 =0x3c6ef372

H3 =0xa54ff53a

H4 =0x510e527f

H5 =0x9b05688c

H6 =0x1f83d9ab

H7 =0x5be0cd19

  • 消息分块

  • 消息扩展

  • 迭代计算

使用以下脚本完成这三个功能:
image.png

最终整合后的SHA-256加密脚本如下:
image.png
得到"Hello, world!"的SHA-256加密值为:
315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3

请前往 登录/注册 即可发表您的看法…