文章图片
编者按:本文由Seabook海叔的技术分享,转载请注明来自Seabook海叔,并联系作者获得授权。
大家好,我的名字叫Seabook,或者大家可以叫我海叔。我是澳大利亚Deakin大学的在读博士生,我的主要研究方向是区块链底层算法,今天开始我将为大家带来一个干货区块链的系列,主要以区块链的技术为主。希望大家喜欢,一起学习成长。
为了更清楚的讲清楚后面 比特币是的技术原理(挖矿,数字签名,钱包地址等),我们先要了解一系列的基本知识点:
什么是Bit,Byte,decimal vs hexadecimal vs binary. 一位?一个字节?2进制,10进制,16进制 ?Hash, what is SHA256? Cryptography, 加密学,大学最容易挂科的科目?对称加密,非对称加密?数学之美 大数字?1000,000,000,000 一个trillion算大吗? 地球上有多少沙子?一杯水里面有多少分子?
我们今天就看一下什么是Hash值? 比特币里面的SHA256又是一个什么鬼东西?
先看百度百科的定义。
哈希值,又称:散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。
海叔:反正海叔我是没看懂上面高冷 晦涩的解释。其实简单理解就是
- 通过hash函数能够使一个字符串,数字文件(音乐,图片,电影)等,产生一个唯一不变的字符串,这个字符串称为hash改变任何元字符串,数字文件(音乐,图片,电影)的任何一点,产生的hash将完全不同。从已经产生的hash,几乎不可能推导到原来的字符串,数字文件等。
String text1 = “My name is Seabook”String result = SeabookHashFunc(text1)9D5CE6EBA420717BE7E7D308B11F8207681B066C951D68F3994D19828F342474 // hash value
String text2 = “My name is seabook” // 唯一的区别是大写S变成小写s。String result = SeabookHashFunc(text1)91D99909F70B81D1F6110B888BC1212A2B530F378F2054A0C00E9C4FF47770B6 // hash value
满足定义:
- 任何字符串前后改变一个S的大小写,产生完全不同的结果从Hash值几乎不可能知道原文是什么
这是必须的,因为这里的SeabookHashFunc其实就是大名鼎鼎的Sha256的算法。Sha256是有NSA (National Security Agency) 发明创造,属于SHA-2家族的hash算法,顾名思义SHA-2, 就有SHA-3家族,以太坊的hash,用的就是SHA3 (理论上第三代优于第二代)。
那我们进一步学习一下Sha256,在比特币的世界里用的最多的就是Sha256哦 (也有一些Base64编码,Base64就不是hash函数了, 跑题了)
任何一串字符,数字文件(图片,音乐,电影), 经过Sha256的计算,会产生一个256bit的binary representation,也就是256/4 = 64位的Hexdecimal的表达方式。这也是为什么上一篇
西部克:Bit? Byte? 二进制? 八进制十进制? 十六进制? 和比特币有猪关系??
zhuanlan.zhihu.com
文章图片
是这个系列的基础了。
String text1 = “My name is Seabook”String result = SeabookHashFunc(text1)9D5CE6EBA420717BE7E7D308B11F8207681B066C951D68F3994D19828F342474 // hash value
如果有兴趣的同学可以数一下是不是64位。当然海叔我会用代码去计算。
“9D5CE6EBA420717BE7E7D308B11F8207681B066C951D68F3994D19828F342474”.length == 64
同学们: 比特币的世界里有哪些事Hash呢?
海叔:我们来看下面的这张图片
文章图片
我们可以看到,所有出块的Hash都是通过Sha256计算出来,包含Merkle Root也是一个Hash值。(Merkle Root 这个开始有深度了,我们后面会继续讲解)
同学:哈哈哈,现在我们懂啦,原来是这么一个回事,block hash原来是sha256计算出来的,根据hash的定义改变block里面任何的东西,整个hash都会改变,所以出块以后就几乎不能更改块里面的记录了,是吗? 我的理解对吗?
【sha256加密|sha256加密_什么是hash值(经常听说的Sha256又是什么?)】海叔:骚年们,你们已经成长了,我们要挑战新的高度了。完美解释收官。