美文网首页
密码学 | 蓄势待发!说说什么是散列算法?

密码学 | 蓄势待发!说说什么是散列算法?

作者: 彭旭锐 | 来源:发表于2020-08-09 23:19 被阅读0次

前言

  • 在计算机科学中,散列算法 的应用场景有很多,例如:散列表的散列函数、消息完整性验证的消息摘要算法,除此之外你还知道哪些应用场景呢?
  • 在这篇文章里,我将带你列举散列算法的 基本要求 & 应用场景。如果能帮上忙,请务必点赞加关注,这真的对我非常重要。

系列文章

相关文章


目录

1. 概述

1.1 散列函数的定义

散列算法(Hash算法,又译哈希算法) 是一种将任意长度输入转换为固定长度输出的算法,输出的结果就是散列值。

散列算法一定是 压缩映射,即:值域会远小于输入值域。例如,MD5的输出散列值为 128 位,SHA256的输出散列值为 256 位。

1.2 散列算法的性质

散列算法有很多,但是都要满足以下性质 & 要求:

性质 描述
单向性 通过散列值无法反推输入数据
一致性 同一个输入数据,计算后的散列值总是相同的
高效性 散列运算过程尽量快速 & 高效
随机性 散列值在输出值域的分布尽量随机
输入敏感性 相似的数据,计算后的散列值差别很大

2. 散列冲突

2.1 什么是散列冲突?

上一节提到,散列算法是压缩映射(输出值域远小于输入值域),因此肯定会存在两个甚至多个输入数据映射到同一个散列值的情况,这就是发生了 散列冲突(又称散列碰撞,Hash Collision)

需要注意的是,散列冲突是无法完全避免的,这其实只要用鸽巢原理(又称:抽屉原理)就很好理解了,假设有 10 个鸽巢,现有 11 只鸽子,无论分配多么平均,也肯定有一个鸽巢里有两只甚至多只鸽子。

举个例子,Java中的字符串"Aa""BB"的散列值就冲突了:

String str1 = "Aa";
String str2 = "BB";
System.out.println(str1.hashCode());  2112
System.out.println(str2.hashCode());  2112 散列冲突

既然散列冲突是无法完全避免的,那么只能采取应对措施,主要有两种:降低概率 & 处理冲突

2.2 降低散列冲突概率

降低散列冲突概率的思路主要有:

  • 1、优化散列算法
    前面提到了散列算法的随机性:散列值在输出值域的分布尽量随机。这是为了避免出现“堆积”现象,即散列值集中于输出值域的某一块区域,这种情况无疑会增大冲突概率。

  • 2、扩大输出值域
    在输入值域相对稳定的情况下,扩大输出值域可以降低冲突概率。例如SHA的散列值长度就比MD5长,相应的冲突概率更低。HashMap 在达到阈值时执行扩容,本质上也是扩大了输出值域。

2.3 处理散列冲突

《数据结构 | 散列表是如何避免散列冲突的?》中,我们将讨论散列表中的解决方案。


3. 散列算法的应用场景

Editting...


4. 总结

  • 散列算法是一种将任意长度输入转换为固定长度输出的算法,由于是压缩映射,因而无法避免散列冲突。

参考资料

  • 《Java加密与解密的艺术》(第6、7、8、9章) —— 梁栋 著
  • 《数据结构与算法之美》(第21、22章) —— 王争 讲,极客时间 出品
  • 《散列算法》—— 维基百科

推荐阅读

感谢喜欢!你的点赞是对我最大的鼓励!欢迎关注彭旭锐的GitHub!

相关文章

  • 密码学 | 蓄势待发!说说什么是散列算法?

    前言 在计算机科学中,散列算法 的应用场景有很多,例如:散列表的散列函数、消息完整性验证的消息摘要算法,除此之外你...

  • 技术科普 | 国密算法在Ultrain区块链中的运用

    密码学是区块链的基础,区块链中大量采用了密码学算法,包括对称加密、非对称加密、单向散列算法、数字签名等技术。 为了...

  • 哈希算法

    一,概念 前面涉及到散列表,散列函数,散列算法。那么和哈希算法又是什么关系,其实散列函数对应的算法就是哈希算法。 ...

  • HashMap深度分析疑问

    hashMap底层是基于散列算法实现,散列算法分为散列再探测和拉链式。hashmap使用了拉链式散列算法,在jdk...

  • 密码安全

    本文介绍密码安全相关的加密与散列算法。 目录 散列算法 加密算法对称加密非对称加密 散列算法 Hashing 是使...

  • iOS加密方法base64,AES,DES,MD5,RSA

    加密算法的分类 base64 编码格式 密码学演化 "秘密本"-->RSA 常见的加密算法1)消息摘要(单向散列函...

  • MD5 , SHA1 , SHA256 比较

    MD5 SHA1 SHA2 都是散列算法 ,什么是散列算法? 什么是SHA? 异同点 MD5SHA1SHA2-2...

  • IOS 逆向开发(二)密码学 HASH

    1. HASH算法简介 1.1 HASH是什么? Hash算法(也叫散列算法) Hash,一般翻译做“散列”,也有...

  • 区块链公私钥的应用

    密码学在区块链的应用非常广泛,可分为3类:对称加密算法、非对称加密算法和哈希散列算法。常见的方法有: Merkle...

  • Hash存储

    什么是哈希 哈希又称作散列(Hash ),就是讲任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列...

网友评论

      本文标题:密码学 | 蓄势待发!说说什么是散列算法?

      本文链接:https://www.haomeiwen.com/subject/wofrdktx.html