在区块链学习中,经常会遇到Hash(哈希,也翻译为散列)的概念。
区块链的定义就使用到Hash,区块链就是所有的区块组成的链式结构,每个区块中都记录着其父区块的Hash值(准确的说:应该是记录着父区块的区块头的Hash值),这样每个区块中都可以通过父区块的Hash值查询历史交易,也可追溯到创世区块,创世区块就是区块链上的第一个区块。
本文主要阐述Hash的概念、特点及应用场景举例。
Hash的概念
- Hash定义
在《Mastering Bitcoin》中关于Hash的定义为
Hash:A digital fingerprint of some binary input.
哈希是二进制数据的一种数字指纹。例如:某一个区块头的哈希值,就是能唯一标识该区块头的一个数字。
通俗讲,哈希就是将一段数据(任意长度)或者一个文件经过一道计算,转换为一个定长的数据,该定长数据即为原数据或者文件的数字指纹,可以唯一标识原数据或者文件。
- 体验Hash
如下网站为“在线Hash值计算器”,通过该网站即可计算一段数据或者一个文件的Hash值。
http://www.fileformat.info/tool/hash.htm
登录网站界面如下,可以计算文本字符串、十六进制数据、文件的哈希值。
在线哈希值计算器以计算文本字符串“abc”的哈希值举例,在文本字符串输入abc,将得到其不同哈希加密算法计算的哈希值。
字符“abc”哈希值结果实际中使用较多的是MD5(Message-Digest Algorithm 5)哈希加密算法和SHA256(Secure Hash Algorithm 256)哈希加密算法。
- 字符“abc”基于MD5算法的Hash值:900150983cd24fb0d6963f7d28e17f72
- 字符“abc”基于SHA256算法的Hash值:ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
Hash算法的特点
-
不可逆性:几乎无法通过Hash的结果推导出原文。
如上例,无法通过文本字符串“abc”的Hash值,反向推导出“abc”。类比人的指纹,就是无法通过人的指纹推导出这个人是谁。
-
无碰撞性:几乎没有可能找到一个y,使得y的哈希值等于x的哈希值。
如上例,无法找到另外的输入y,使得其哈希值与字符串“abc”的哈希值相同。类比人的指纹,就是几乎没有两个人的指纹是一样的。
哈希算法应用场景举例
- 官方发布软件包文件的完整性校验
用户通常在官网下载官方发布的软件包文件,软件包下载过程中存在被黑客篡改的可能性,特别是网银、股票、区块链等的软件包,直接与钱相关,如果软件包被黑客篡改,可能导致软件使用过程中用户的资产损失。
通常官方在发布软件包时,会同时发布软件包基于一定加密哈希算法的哈希值。用户下载软件包到本地后,可通过“Hash值计算工具”计算软件包的Hash值,如果计算出的值与官方发布的哈希值一致,则表示下载的软件包文件完整,可放心安装使用。
- 服务器中存储用户密码
所有要求用户注册用户名和密码的平台,包括银行账户、数字货币交易平台、电商平台等,用户设置的账户密码在平台服务器都是通过哈希算法加密存储的(通常采用MD5算法),而不是明文存储的。
用户登录账户时,将用户输入的密码进行对应的哈希计算,将计算的哈希值与存储在服务器的哈希值进行比较,如果哈希值一致,则验证密码输入正确,登录成功;如果哈希值不一致,则验证密码输入错误,登录失败。
总结
本文主要阐述了Hash(哈希)的概念、特点及应用场景。Hash就是一段数据(或者一个文件)的数字指纹;Hash算法具有不可逆性、无碰撞性;并举例说明哈希算法的应用场景。
网友评论