传说当人类成功建造第一台超级智能计算机时,他们决定做一个小测验,看看这台超级计算机能做多少事。实验设计很简单:让超级计算机计算圆周率是多少。于是,在人们不知不觉中,这台超级计算机已经占领了整个地球,然后在外太空发动了战争,征服了整个银河系,把整个已知的宇宙变成了一台巨大的超级计算机。最后花了无穷无尽的时间计算出了人类给它的问题:圆周率。
这是我在《人类大历史》这本书上看到的一个故事。原文讨论算法程序对人类的威胁;那些不断生产、优化、改进,号称改善人类生活的算法软件,即使创作者本身一开始完全是出于善意或学术研究而建立的,最终也可能完全失控,造成毁灭性的结果。这个故事让我想起了比特币等加密货币的挖掘程序算法,以及它在过去一段时间里对我们生活的影响。还记得2017年,加密货币正在被夯的时候,全球矿业热潮引发了全国范围的用电热潮。当时有媒体报道称,加密货币的挖矿机会导致公众无电可用。甚至有人传言,那年夏天台电几次临时跳电都是因为挖比特币的人太多了。
本文就是要讲比特币挖矿背后的算法:密码哈希函数。
哈希函数是什么意思?Hash函数是指将哈希表中元素的键值映射到元素的存储位置的函数。
在一般的线性表中,在树中,记录在结构中的相对位置是随机的,即与记录的关键字没有确定的关系。因此,在结构中搜索记录时,需要与关键字进行一系列的比较。这种搜索方式是以“比较”为基础的,搜索效率取决于搜索过程中进行比较的次数。理想情况下,你可以直接找到需要的记录,所以你必须在记录的存储位置和它的关键字之间建立一个明确的对应关系F,使得每个关键字对应结构中的一个唯一的存储位置。
哈希函数应用在区块链的什么地方?1。区块链通过哈希函数
2的结果将数据串联成难以篡改的连接。比特币、以太坊、Ripple等电子加密货币(题外话,有人说应该命名为加密货币),通过哈希函数
3生成钱包地址。在加密货币挖掘的世界里,用哈希速率:th/s(每秒万亿次哈希)来计算区块链网络
4的计算能力。比特币通过调整哈希函数的难度,控制整个比特币网络平均每10分钟生成一个块内存块。
那么我们开始了解哈希函数的算法。首先,hash函数有以下两个特征:
1。无论传入(input) hash函数的数据量是多少,hash函数返回的数据长度都是相同的固定输入,并且
2。同样的产量;被返回;不同的输入,返回不同的输出;
换句话说,哈希函数的返回结果(称为哈希值)是一个长度相同但数据内容唯一的数值。因此,如果我们看到两个完全不同的“哈希值”,我们可以推断它们的原始输入一定是不同的;相反,两个相同哈希值的原始输入值将完全相同。
我们可以使用Python内置的SHA-256哈希算法,展示上面的哈希函数特征
import Hash libx 1=" My1st bit coin "。encode () y1=hashlib.sha256 (x1)。Hexdigest () x2="我不是中本聪"。encode () y2=hashlib.sha256(x2)。hex digest()print(f ' y1={ y1 } ')print(f ' y2={ y2 } ')print(f ' y1 include { len(y1)} words ')print(f ' y2 include { len(y2)} words ')如果Python还没有安装,可以用接下来的网址试试看我的第一个比特币散列后的值是否和上图Python中的值(y1=后面的字符串)一样:3359Anders.com/blockchain/hash 2022尚力财经小编 . htmlHash函数还有一个特点:单向函数
以Python程序为例,在输入值已知的情况下,可以通过sha256函数快速计算出Hash值=" a5e4c 0673 fc EDF F2 BC 2174123 e 97 b 511 D5 d 17 f 4317869 e 7。但另一方面,我们要从“a5e4c 0673 fc EDF 2 BC 2174123 e 97 b 511d 5d 17 f 4317869 e 7 BD 60d 3d 7 fa 1c 6”这一串数据中推导出input的值:“我的第1个比特币”。唯一的办法就是通过暴力求解,也就是不断的向sha256函数扔字符串,直到哈希值相同,也就是传入的输入字符串是“我的第1个比特币”,才能得到答案。你能想象这种猜测的概率有多低吗?如果你能猜对,那么你就不用在这里研究区块链的记忆了。直接买彩票比较快。区块链通过上述哈希函数的三个特性,构造了内存区块链中的数据一旦写入就无法修改的独特函数。你可以去接下来的网址体验一下区块链是如何通过hash函数将各个区块内存块紧密的连接起来,并且坚定的保证构建好的区块块难以被篡改。https://anders.com/区块链/blockchain.htmlbase58编码
在文章的开头,我们提到了hash函数应用于加密货币钱包地址的例子。你可能在一些网站或博客上看到过这些乱码。其实博主或者卖家会提供一套比特币地址,非常乱码,让你给对方支付比特币;比特币地址,看似是一堆英文数字的随机编码,有一个特殊的设计:所有的比特币地址都用Base58编码。在解释Base58之前,我们先来看看比较常见的,比如已经应用于Email的计算机代码:Base64。Base64代码包含26个小写英文字母、26个大写英文字母、10个阿拉伯数字(0~9)和两个特殊字符(和?—?)。Base58是Base64的子集,提供了一种可读性高、易于检测和防止错误的编码格式,因此被很多加密货币广泛使用。Base58删除了一些字体格式中容易识别或看起来非常相似的字符:数字0、大写字母O、小写字母L和大写字母I,并删除了特殊字符(和?—?)。换句话说,Base58包含大小写英文字母和阿拉伯数字,而是集合的四个字符(0,o,l,I)比特币的Base58字母表:123456789 abcdefghjklmnpqrstuvwxyzabcdefghijkmnopkrsttuvwxyz
hashing power
最后,对于对比特币网络散列能力感兴趣的读者,可以到以下网址查看比特币网络的散列率变化: 从2009年的每秒不到1兆哈希(MH/sec ),现在已经超过每秒40兆哈希(EH/sec ),仅根据表面数据计算,增长率超过40万亿。 HashPower的单位换算可以参考接下来的URLhttps://coin guides . org/HashPower-Converter-Calculator/OK。我们已经在两篇文章中了解了内存区块链的基础,现在是时候写一个区块链程序了。在继续下一篇文章的开发之前,请确保您的计算机的开发环境中已经安装了以下Python版本和相关模块。Python 3.6。Flask 0 . 12 . 2 . Requests 2 . 18 . 4我用了另外两个flask模块。创建表单和屏幕
FLASK-WTF FLASK-Bootstrap
以上模块都可以通过PIP安装
PIP安装FLASK PIP安装请求PIP安装FLASK-WTF PIP安装FLASK-Bootstrap
那么,
以上是什么意思hash函数?哈希函数在区块链的什么地方应用?更多关于哈希函数的应用,请关注coir.com的其他相关文章!
标签: 2022