计算机密码学1_散列算法
我也不是专业的,请带着思考阅读.
还有就是,文中的白话,别杠.
关键字:
不可逆
、hash
、散列
0.背景
接下来讨论的几节内容,是由下面这张图扩展开来.
1.散列
散列就是不可逆算法的实现.
类似于指纹,每个人都有一个独特的指纹,人不同,指纹也就不同.
在计算机的世界里,每个文件也可以有自己的一个散列值,字符串、视频、语音等等都可以转换成二进制的数据,他们都能拥有自己的散列值,每个文件的散列值同样可以是独一无二的.
散列是一种不可逆运算,通过输入x,通过一定的函数运算,可以得到一个结果y.当x固定时,输出的y也总是固定的.
日常生活中,像什么hash、不可逆运算等等,你都可以简单的理解为散列.
它具有以下特点:
- 固定大小
- 雪崩效应
- 单向
- 冲突避免
2 特点
要设计一个良好的Hash算法,应该满足以下要求.
2.1 固定大小
不管多大的数据,得出的hash值长度都是一样的.
看下图这个漏斗,我们可以形象的理解为,不管多大的东西进去,出来的值总是固定大小的.
不同的散列算法,得出的散列值长度是不一样的,如MD5为128bit.

2.2 雪崩效应
稍微修改一点,哪怕是小小的1bit,得出的hash值都是截然不同的.
类似于双胞胎,看起来哪里都一样,但是指纹确实完全不同的.
2.3 单向
拿着指纹反向推导出这个人,是一件困难的工作.
我们可以通过入参x计算出hash值y,但是反向推导是不可行的,即不能通过hash结果y轻易计算出源数据x.
2.4 冲突避免
对于不同的文件,我们应该尽量确保计算出的hash值是不一样的.
对于输入的数据,如果你的hash算法结果很容易一样,这并不符合我们的要求.
我们要尽量去确保散列算法能避免冲突,但是能完全避免也是不合理的.
以MD5为例,入参是整个宇宙,但是结果总归只有那么128位,是可能存在入参不同但是hash值却相同的情况.
3 实例
网上下文件的时候,经常看到后面一个什么MD5值,SHA值,为啥要写个这个?
下载下来文件后,你可以拿相应的计算工具去计算这个文件的MD5值,如果传输过程中文件有损坏/修改,得出的MD5值将会不一样.
这样,我们就能确保下载下来的文件跟官网的文件是完全一样的.
那玩意数据库里的密码竟然存的是HASH值?
由于不可逆的特性,你破解数据库拿到数据后,看到一堆hash值,也很难猜到真实的用户密码.
那我存成hash值,怎么知道用户输入的明文密码对不对啊?
拿到密码计算hash值,跟库里面的hash值一样,那不就对了吗.
4 扩展
由于算法是单向的,我们很难通过hash值反向得出源数据.像上面这个密码的场景,有心人可以存一个密码库.
记录下常见的"源数据-hash值",我拿着hash值查表,这不把密码找到了吗?
所以呀,让你不要用常见的密码,给你整个hash骗骗眼睛又怎么样,hash值都被别人存起来了.
只要咱的库够全,你的hash值我也有机会找到.
__EOF__

本文链接:https://www.cnblogs.com/yang37/p/15484153.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具