听说这玩意可以防篡改——单向散列函数
这是我要的文件吗?
由于某些原因,访问国外网站的速度较慢,所以我们常使用镜像网站下载文件。假设你正通过镜像网站从网络上下载一款软件,但是如何保证你下载的软件是正版,没有被恶意篡改过呢?怎么保证我的软件的完整性呢?
单向散列函数
要解决上述问题就需要用到单向散列函数,单向散列函数相当于为数据增加一个数据指纹,我们使用一个函数计算出数据的指纹,这个指纹是独一无二的,相同数据生成指纹相同,不同数据生成指纹不同(即使一小点改动最终生成的指纹都完全不同),通过对比指纹验证数据是否被篡改过。
如下图所示:
单向散列函数有一个输入和一个固定长度的输出。输入称为消息,输出称为散列值。输入可以是一个文件,一个视频,一段程序等等(本质都是二进制数据流),输入不限长度,输出散列值的长度跟消息的长度无关,不论多大长度的消息,都会计算出固定长度的散列值。
单向散列函数性质
- 对于任何长度的输入数据块都能产生固定长度的输出散列值。
- 能快速计算散列值。
- 消息不同散列值不同,一点点的变动都会引起整个散列值的巨大变化。(因为散列值的长度是固定的,所以有可能会出现不同的消息产生相同散列值的情况,这种情况叫做碰撞)
- 单向性(不能通过散列值反算出消息)。
常用单向散列函数
消息摘要算法(Message Digest)
MD4 和 MD5 是由 Rivest 分别在 1990 年和 1992 年设计的,现在已经不再安全了。它们接受任意长度数据流后可以产生出一个 128bits(16字节) 的散列值。1996 年后该算法被证实存在弱点,可以被破解,对于需要高度安全性的数据,建议改用其他算法,如下面的 SHA-2。
安全散列算法(Secure Hash Algorithm)
SHA 算法是一种密码散列函数算法标准,由美国国家安全局研发,SHA 算法经过了 SHA-1,SHA-2,SHA-3。
- SHA-1:一种能够产生 160bits(20字节) 散列值的单向散列函数,已经不安全,现在不推荐使用。
- SHA-2:是 SHA-1 的后继者,其下又可再分为六个不同的算法标准,包括:SHA-224、SHA-256(常用)、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
- SHA-3:第三代安全散列算法(之前名为 Keccak),这个算法比起其他算法计算速度明显更快。
应用
- 检测数据是否被篡改(防篡改)
- 基于口令的加密
- 消息认证码
- 数字签名
- 伪随机生成器
- 一次性口令
分类:
密码学
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!