当前位置:   article > 正文

区块链 试题_区块链期末复习四

区块链导论期末编程题

c7876f4764d42135a91b234b9a6bfdf8.png

之前已经把主要部分看完了(我觉得应该差不多了叭)。接下来要开始扣一些细节,毕竟得考试,逐个击破之。

九、一些细节和试题

9.1 SHA256算法

这里直接搬运CSDN的文章,写的很好,点这个链接。

https://blog.csdn.net/u011583927/article/details/80905740​blog.csdn.net

我写一些我自己能看懂的话。

对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。分几步走战略(滑稽)

9.1.1常量初始化

SHA256算法中会用到8个哈希初值以及64个哈希常量。这八个初始值如下。

226fc4f63174e22b61ce3a4925ec8d30.png

这些初值是对自然数中前8个质数(2,3,5,7,11,13,17,19)开平方根,对其小数部分取前32bit而来。例如根号2约为0.414213562373095048,而

8e77b9abfc33f4a21560c46eae23ad19.png

比较这个和上述图片的第一行。

在SHA256算法中,用到的64个常量如下:

76fdee78795311805fb58625a719fdf6.png

和8个哈希初值类似,这些常量是对自然数中前64个质数的立方根的小数部分取前32bit而来。

9.1.2信息预处理

SHA256算法中的预处理就是在想要Hash的消息后面补充一些特定信息,使整个消息满足指定的结构。信息的预处理分为两个步骤:附加填充比特和附加长度。

1)附加填充比特

在报文末尾进行填充,使报文长度在对512取模以后的余数是448。填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。需要注意的是,信息必须进行填充,也就是说,即使长度已经满足对512取模后余数是448,补位也必须要进行,这时要填充512个比特。因此,填充是至少补一位,最多补512位。

举个栗子:以信息“abc”为例显示补位的过程。

a,b,c对应的ASCII码分别是97,98,99

于是原始信息的二进制编码为:01100001 01100010 01100011

补位第一步,首先补一个“1” : 0110000101100010 01100011 1

补位第二步,补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000

补位完成后的数据如下(为了简介用16进制表示):

1900a6c12588fb21bc56d3238e3ccd63.png

这时候会有个小问题,为什么是余448。这是因为在第一步的预处理后,第二步会再附加上一个64bit的数据,用来表示原始报文的长度信息。而448+64=512,正好拼成了一个完整的结构。

2)附加长度值

附加长度值就是将原始数据(第一步填充前的消息)的长度信息补到已经进行了填充操作的消息后面。SHA256用一个64位的数据来表示原始消息的长度。长度信息的编码方式为64-bit big-endian integer,就是所谓的大端存储,百度一下就好了。这里举个小栗子。比如存0x123456,正常存储就是0x123456,而大端存储就会存成0x563412这样子,两个数字占一个字节,所以56占一个字节,34一个,12一个,简单点说,就是按字节逆序存储。

9.1.3逻辑运算

SHA256散列函

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/714211
推荐阅读
相关标签
  

闽ICP备14008679号