近日笔者在学习区块链的相关知识,接触到SHA-256算法,这里做一个知识梳理和总结。
强烈推荐大家自行去学习下面链接github上的工程,作者的动画演示和解释做的非常出色,逻辑非常清晰,B站搬运的对应的油管的讲解视频也放在下面,本文也是基于此github工程和作者学习过程的思路进行呈现。
github:
https://github.com/in3rsha/sha256-animation
B站讲解视频:
https://www.bilibili.com/video/BV1Jg411G7tc
ruby(windows)安装教程:
https://www.cnblogs.com/minisayo/p/14015747.html
可以先将github工程下载到本地,因为作者是用的ruby进行动画展示,所以需要再windows/Linux系统上安装ruby,之后在工程目录下调用ruby xxx.rb指令即可啦。
下面是整个工程的流程图,也对应着SHA-256算法的设计思路。

一、运算定义
为了后续分析思路与流程的连贯性,在这里先统一声明一下一些运算的定义,后续一些函数会直接对这些运算进行封装使用。
1、右移Right Shift (shr.rb)

这里的右移会产生两种结果,第一种结果是左侧移动完之后位为0,右侧被移走的位丢失,如上图所示SHR 32的操作,原数据为32位,在右移32位之后原数据都被右移丢失,剩下的左侧移动完的位全为0。
2、旋转右移Right Shift (rotr.rb)

这里要尤其注意和SHR右移的区别,观察演示图可以发现对于旋转右移而言数据组成了一个环形,移动位数只是改变位的绝对位置,并不会丢弃数据,所以原数据32位,再进行ROTR 32的操作实际上就是所有数据位旋转了一整圈,又回到了原来的位置。
3、异或XOR (xor.rb)

按位异或,0^0 = 0,1^0 = 1,0^1 = 1,1^1 = 0。

最低0.47元/天 解锁文章
890

被折叠的 条评论
为什么被折叠?



