「SHA SHA, SHA SHA SHA SHA」
SHA-256是SHA-2家族里输出位元为256的杂凑函数,
也是比特币区块链所使用的杂凑函数。
我们来看他怎麽运作的。
第一件事情是补足位数,也就是除了原先有的讯息,
我们要把讯息後面加上1後再加上一堆0,
直到总长度是512位元的倍数减掉64位元。
而被减掉的那64位元,用来写上原讯息的位元长度。
设定初始值,初始值是2, 3, 5, 7, 11, 13, 17, 19开根号後的小数点後前32位元。
h0 = 0x6a09e667
h1 = 0xbb67ae85
h2 = 0x3c6ef372
h3 = 0xa54ff53a
h4 = 0x510e527f
h5 = 0x9b05688c
h6 = 0x1f83d9ab
h7 = 0x5be0cd19
还要储存64个回合常数,
分别是前64个质数开三次方根後,小数点後前32位元的值,计做 K[0] 到 K[63]。
每512位元为一个区块。
将填充後的讯息每32位元分成一堆,称为word
每个区块会有16个word。
在这16个word後面,我们要再加上48个word。
这48个word的生成方式如下:
for i from 16-63
进行完以上步骤後,我们会有64个word,其中16个是原始的,48个是加上去的。
先初始化向量(a, b, c, d, e, f, g, h)等於当前的杂凑值(h0, h1, h2, h3, h4, h5, h6, h7)
for i from 0 - 63
接着将将结果加上原本的h,之後进行下一个区块
h0 = h0 + a
h1 = h1 + b
h2 = h2 + c
h3 = h3 + d
h4 = h4 + e
h5 = h5 + f
h6 = h6 + g
h7 = h7 + h
如此重复一直计算直到每个区块都结束。
就会得到一个最终的 h0-h7。
只要把h0-h7放在一块(concatenate),就是最终结果。
以上就是 SHA-256 的演算法内容,是不是超级复杂的。
我个人觉得他有点像 AES 的那种位元调换来调换去的那种感觉,
不过复杂了许多。
所以可以想到的是电脑跑的速度有多快了,
每一次矿工在进行运算时,
都要跑遍以上的所有步骤,然後运算过超级多次之後才有可能冒出一个符合条件的,
而且还有高机率被别人抢走。
看完详细的介绍,再来看维基百科的图,大概就能理解了(吧?)。
图片来源:
https://medium.com/biffures/part-5-hashing-with-sha-256-4c2afc191c40
https://zh.wikipedia.org/wiki/SHA-2
前言 这是 Obsidian 使用教学 — 基础篇的第 6 篇文章。 在 上一篇文章 中,我介绍了替...
用 Owner 权限跑 Terraform 等於用 root 权限跑後端,夜路跑多了迟早遇到鬼 CI...
前言 之後几天会拿来做一个 app~ 在查了一些资料之後, 整理了 开发 APP 的步骤。 开发步骤...
嗨大家好,这系列的文章主要是想纪录我在写 Leetcode / AlgoExpert 的题目时的一些...
上一回提到大O符号表达执行时间,但对於大O符号我们可能有些疑问。 既是叫时间,那它的单位是什麽? 我...