区块链前置知识之 hash (一)

简介: 区块链前置知识之 hash (一)

1定义


hash 是一种把任意长度输入变换成固定长度输出的一种算法。


假设我们已经定义了一个 hash 函数名为 H,输入内容为 message,输出内容为 x,那么就有如下公式

H(message) = x

这是一个压缩的过程,通常情况下,我们会把输出值称之为 hash 值


接下来通过一个具体的案例来了解 hash 的过程


我们定义这样一个场景,约定任意正整数,要存放在长度为 6 的数组中,那么此时,我们可以利用 hash 的思想设计什么样的方案来做到这个事情呢?


数组的具体位置我们可以用下标来表示 0, 1, 2, 3, 4, 5。想要将任意正整数放入到数组中,那么我们只需要设计一个函数,输入值为任意正整数,输出值为该数组下标中的任意一个即可,得到了输出值,我们就相当于知道应该把输入值放到数组中的某个位置了

image.png

我们可以使用求余法来定义这个 hash 函数

function suplus(number) {
  return number % 6
}

于是,随便取几个数,得到 hash 值之后就能存入数组对应的位置

// 输入值:61
suplus(61) = 1

image.png

// 输入值:101
suplus(101) = 5

image.png

此时的哈希值表示的是数组的下标,因此在很多应用场景,输出结果哈希值也被称为哈希地址


2哈希碰撞


在上面的例子中,输入值的范围一定大于输出值的范围,这是 hash 的重要特性之一。因此在某些情况下,不同的输入会得到相同的输出结果

// 不同的输入,得到了相同的输出,哈希地址相同
suplus(7)  = 1
suplus(61) = 1

此时哈希地址相同,按照规则,我们不得不把不同的值,存入相同的位置,这种情况就被称之为哈希碰撞(collision)


解决哈希碰撞的方法很多,这里介绍一个比较常见的方法:以数组的每个地址为根节点,构建一个新的链表


例如当输入数字分别为 7, 61 时

image.png

但是当数据量庞大时,链表的查询速度比较低效,因此我们在实践中,会将链表替换成红黑树等操作效率更高的数据结构


当然,最理想的情况是输出范围足够广,不出现 hash 碰撞。因此我们实践中使用的 hash 函数,输出值的范围都非常庞大,例如早期用得比较多的 md5,现在使用比较多的sha256:比特币中使用的哈希算法。但是由于输入值范围一定大输出值范围,因此理论上哈希碰撞一定会存在


现在 md5 已经可以人为制造 hash 碰撞,因此实用性大大降低


接下来的一章,跟大家介绍哈希的特性与应用

相关文章
|
存储 算法 区块链
Hash哈希竞猜游戏系统开发/区块链dapp游戏开发/规则玩法/项目案例/方案逻辑/成熟技术/源码程序
  哈希算法(Hash Algorithm)是一种将任意长度的消息映射为固定长度的消息摘要(Message Digest)的算法。哈希算法可以将任意长度的输入数据转换为固定长度的输出,
|
区块链
区块链hash哈希竞猜游戏系统开发项目游戏讲解
区块链hash哈希竞猜游戏系统开发项目游戏讲解
322 38
|
算法 安全 5G
Hash哈希竞猜游戏系统开发(区块链游戏开发详情)丨哈希hash竞猜游戏系统开发(运营版)/详细案例/源码部署
 随着信息技术和通信技术的不断进步,我们已经步入了智能工业时代。在这个时代,各种智能技术的应用正在推动着工业的升级和转型,人工智能技术、5G技术和工业互联网技术等新一代信息技术正在不断推进着时代进步和发展。
|
存储 区块链 数据安全/隐私保护
Hash哈希竞猜游戏系统开发(区块链游戏开发案例)丨Hash哈希竞猜游戏系统开发(详细程序)丨源码方案
单向性(one-way),从预映射,能够简单迅速的得到散列值,而在计算上不可能构造一个预映射,使其散列结果等于某个特定的散列值,即构造相应的M=J(h)不可行。这样,散列值就能在统计上唯一的表征输入值,因此,密码学上的Hash又被称为”消息摘要(message digest)”,就是要求能方便的将”消息”进行”摘要”,但在”摘要”中无法得到比”摘要”本身更多的关于”消息”的信息。
|
存储 算法 安全
区块链概念1:Hash 算法
区块链概念1:Hash 算法
568 0
区块链概念1:Hash 算法
|
Ubuntu 区块链
区块链哈希hash游戏技术开发详细方案(成熟代码)
区块链哈希hash游戏技术开发详细方案(成熟代码)
121 0
|
算法 安全 区块链
区块链之旅(四)双花攻击、博弈论、Hash函数、数字签名
双花”,即一笔钱被花了两次或者两次以上,也叫“双重支付” “双花攻击”,又叫“双重消费攻击”,即同一笔资金,通过某种方式被花费了两次,取得了超过该笔资金的服务。
317 0
|
安全 算法 区块链