科普知识——Hash(哈希)

在区块链学习中,经常会遇到Hash(哈希,也翻译为散列)的概念。

区块链的定义就使用到Hash,区块链就是所有的区块组成的链式结构,每个区块中都记录着其父区块的Hash值(准确的说:应该是记录着父区块的区块头的Hash值),这样每个区块中都可以通过父区块的Hash值查询历史交易,也可追溯到创世区块,创世区块就是区块链上的第一个区块。

本文主要阐述Hash的概念、特点及应用场景举例。

Hash的概念

  1. Hash定义

在《Mastering Bitcoin》中关于Hash的定义为

Hash:A digital fingerprint of some binary input.

哈希是二进制数据的一种数字指纹。例如:某一个区块头的哈希值,就是能唯一标识该区块头的一个数字。

通俗讲,哈希就是将一段数据(任意长度)或者一个文件经过一道计算,转换为一个定长的数据,该定长数据即为原数据或者文件的数字指纹,可以唯一标识原数据或者文件。

  1. 体验Hash

如下网站为“在线Hash值计算器”,通过该网站即可计算一段数据或者一个文件的Hash值。

http://www.fileformat.info/tool/hash.htm

登录网站界面如下,可以计算文本字符串、十六进制数据、文件的哈希值。

科普知识——Hash(哈希)_第1张图片
在线哈希值计算器

以计算文本字符串“abc”的哈希值举例,在文本字符串输入abc,将得到其不同哈希加密算法计算的哈希值。

科普知识——Hash(哈希)_第2张图片
字符“abc”哈希值结果

实际中使用较多的是MD5(Message-Digest Algorithm 5)哈希加密算法和SHA256(Secure Hash Algorithm 256)哈希加密算法。

  • 字符“abc”基于MD5算法的Hash值:900150983cd24fb0d6963f7d28e17f72
  • 字符“abc”基于SHA256算法的Hash值:ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

Hash算法的特点

  1. 不可逆性:几乎无法通过Hash的结果推导出原文。

    如上例,无法通过文本字符串“abc”的Hash值,反向推导出“abc”。类比人的指纹,就是无法通过人的指纹推导出这个人是谁。

  2. 无碰撞性:几乎没有可能找到一个y,使得y的哈希值等于x的哈希值。

    如上例,无法找到另外的输入y,使得其哈希值与字符串“abc”的哈希值相同。类比人的指纹,就是几乎没有两个人的指纹是一样的。

哈希算法应用场景举例

  1. 官方发布软件包文件的完整性校验

用户通常在官网下载官方发布的软件包文件,软件包下载过程中存在被黑客篡改的可能性,特别是网银、股票、区块链等的软件包,直接与钱相关,如果软件包被黑客篡改,可能导致软件使用过程中用户的资产损失。

通常官方在发布软件包时,会同时发布软件包基于一定加密哈希算法的哈希值。用户下载软件包到本地后,可通过“Hash值计算工具”计算软件包的Hash值,如果计算出的值与官方发布的哈希值一致,则表示下载的软件包文件完整,可放心安装使用。

  1. 服务器中存储用户密码

所有要求用户注册用户名和密码的平台,包括银行账户、数字货币交易平台、电商平台等,用户设置的账户密码在平台服务器都是通过哈希算法加密存储的(通常采用MD5算法),而不是明文存储的。

用户登录账户时,将用户输入的密码进行对应的哈希计算,将计算的哈希值与存储在服务器的哈希值进行比较,如果哈希值一致,则验证密码输入正确,登录成功;如果哈希值不一致,则验证密码输入错误,登录失败。

总结

本文主要阐述了Hash(哈希)的概念、特点及应用场景。Hash就是一段数据(或者一个文件)的数字指纹;Hash算法具有不可逆性、无碰撞性;并举例说明哈希算法的应用场景。

你可能感兴趣的:(科普知识——Hash(哈希))