密码学之哈希

原文链接:https://zhuanlan.zhihu.com/p/44544072

哈希(hash)

哈希函数是一种函数。

举一个简单的例子来说明它的用法。譬如学校里以学生名字为索引建了一张表,存储学生的信息。同时希望在查找的时候能够高效率地查找到学生。可以怎么实现呢?(如果以学号为索引,可以一次查找就找到;以名字为索引纯粹是举例;但是在实际中有很多以名字为索引的情况,譬如Web开发中,表单form的各项一般都有名字,在后台代码实现中便是以名字为索引的)

如果靠匹配字符串来查找,毫无疑问是非常低效的;所以这个时候的一个做法就是,首先在存储时,对名字进行一次哈希,得到一个数字;然后将名字存在相应数字所对应的位置。在进行查找时,再对希望查找的名字进行一次哈希,得到位置。在算法上,哈希的平均复杂度是O(1)。

加密哈希(cryptographic hash)

这里重点讨论的是加密哈希。
加密哈希是哈希函数的一种,它具有某些属性,使其适用于加密。通过加密哈希,它将任意大小的数据映射到固定大小的位串(散列),并被设计为单向函数,即一个不可逆的函数。从理想的加密散列函数输出重新创建输入数据的唯一方法是尝试对可能的输入进行暴力搜索,以查看它们是否产生匹配,或使用匹配哈希的彩虹表。布鲁斯施奈尔称单向散列函数是“现代密码学的主力”。输入数据通常称为消息(Message),输出(散列值或散列)通常称为消息摘要或简称为摘要(Digest)。

加密哈希的属性

理想的加密哈希函数有五个主要属性:

1.它是确定性的,因此相同的消息总是产生相同的散列
2. 可以快速计算任何给定消息的哈希值
3. 除了通过尝试所有可能的消息之外,从其散列值生成消息是不可行的
4. 对消息进行小的更改便能引起哈希值的巨大改变,以使新哈希值看起来与旧哈希值不相关
5. 找到具有相同散列值的两个不同消息是不可行的

下面对上面的五个属性进行简单解释。

1.确定性的
常见的哈希函数都满足这个特性。(只要计算过程中没有引入随机数/调度,应该都满足)
2. 快速计算
SHA-256算法的主要操作是异或运算,位运算非常快。
3. Hiding
hiding就是知道哈希的结果不能倒推输入。简单来说,譬如 x mod 100这样的哈希函数,如果结果是1,那么x可能是1、101、201等无穷的数。SHA族算法,从结果完全得不到输入的任何信息。
4. 雪崩效应
来自wiki,对输入的一点修改“over”,结果变化很大,也叫“雪崩效应”。
5. 抗冲突(collision-resis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值