单向散列函数

简介: 单向散列函数

文章目录



单向散列函数


在介绍单向散列函数之前,我们先了解一下什么情况下需要使用到单向散列函数。


如果你需要从国外的网站上下载一个软件,但是因为种种原因,国外的网络太慢了,下载几个G的数据几乎是不可能的。刚好国内有镜像网站,可以从国内下载数据。


但是如何保证国内的镜像不是被篡改过后的呢?这个时候就需要单向散列函数了。一般来说网站会提供MD5或者SHA的值作为验证值。


单向散列函数有一个输入和输出。输入称为消息,输出称为散列值。


散列值的长度跟消息的长度无关,不论多少大小的长度的消息,都会计算出固定长度的散列值。


单向散列函数的性质


单向散列函数具有下面几个特性:


  1. 能够根据任意长度的消息计算出固定长度的散列值。


  1. 计算速度要快。


  1. 消息不同,散列值也不同。


这就意味着,如果仅仅是一点点的变动都会引起整个散列值的巨大变化。


因为散列值的大小是固定的,所以有可能会出现不同的消息产生相同散列值的情况。这种情况叫做碰撞。


难以发现碰撞的性质被称为抗碰撞性。当给定某条消息的散列值时,必须保证很难找到和该消息具有相同散列值的另一条消息。


  1. 单向散列函数必须具有单向性。所谓单向性是指无法通过散列值来反推出消息的性质。


单向散列函数的实现


单向散列函数有很多实现方式,你甚至可以自己写一个。常见的如MD4,MD5, MD(Message Digest)是消息摘要的缩写。


MD4和MD5是由Rivest在1990年设计的,现在已经不再安全了。


SHA-1 是由NIST设计的一种能够产生160比特散列值的单向散列函数。现在已经不推荐使用。


SHA-256, SHA-384, SHA-512同样是由NIST设计的单向散列函数,他们的散列长度分别是256,384,512比特。这几种单向散列函数统称为SHA-2。


SHA-1已经在2005年被攻破了。


SHA-3是在2005年SHA-1被攻破的背景下开始制定的,SHA-3是通过公开竞争的方法选拔出来的,最终被选中的算法叫做Keccak算法。


对单向散列算法的攻击


单向散列算法最后的hash值是有固定长度的,所以只要我们愿意,总是可以不断的重试,从而找到两个相同的hash值。


相关文章
|
算法 机器学习/深度学习 数据安全/隐私保护
murmur3哈希算法
murmur3哈希算法 murmur3非加密哈希算法 murmur3非加密哈希算法导图 据算法作者Austin Appleby描述,有c1, c2, n 三个常量用大量测试数据调测出来的,可以对数值进行微调。
14390 0
|
19天前
|
存储 算法 安全
哈希算法
哈希算法是单向加密技术,将任意数据转化为固定长度的唯一摘要。特征包括确定性、快速性、雪崩效应和单向性。应用广泛,如数据完整性校验、密码存储和哈希表。常见算法有MD5、SHA-1、SHA-256,选定时需注意安全性和抗碰撞能力。
10 3
|
10月前
|
存储 移动开发 算法
【数据结构和算法】使用数组的结构实现链表(单向或双向)
【数据结构和算法】使用数组的结构实现链表(单向或双向)
|
10月前
|
存储 算法 安全
哈希算法介绍
哈希算法是一种将任意长度的数据映射为固定长度的固定大小值的算法。它是一种单向函数,即无法从哈希值反推出原始数据。哈希算法在密码学、数据完整性校验、数据索引等领域有广泛的应用。
136 0
|
12月前
|
算法
散列,字符串hash初步
散列,字符串hash初步
|
数据安全/隐私保护
散列函数是干什么的?底层原理是什么?
散列函数是干什么的?底层原理是什么?
285 0
|
算法 物联网安全 物联网
【密码学】单向散列函数简介
​  单项散列函数又称为安全散列函数或者哈希函数,可以将一段可变长度是输入数据转化为固定长度的一段输出值。 输入数据通常称为消息,输出数据通常称为消息摘要或者摘要,可用于检查消息的完整性。​  常用的单向散列算法有MD4/5系列和SHA系列等。由于MD4、MD5算法都已被攻破,渐渐退出历史舞台,而SHA系列算法在物联网安全领域比较常见,特别是SHA256算法。​  额外提一点,提到单向散列函数的特性,很多人一下子想到,我们经常使用到的CRC校验,例如将一段可变长度的数据经过CRC校验后,生成2个字节的校验值
264 0
【密码学】单向散列函数简介
|
存储 算法 C++
|
算法 Serverless C++
|
算法 安全 数据安全/隐私保护
哈希函数/散列算法
哈希函数(Hash function),又称散列函数、散列算法,它是一种不可逆的信息摘要算法,具体实现就是把任意长度的输入信息通过哈希算法变成固定长度的输出信息。
191 0