散列函数和文件比较

散列函数 和 文件比较

目录

一、散列函数 

1.散列函数(Hash function)=散列算法、哈希函数 

2.散列碰撞(collision) 

二、MD5 

1.MD5是什么?128位散列值[16字节]一般使用32位16进制表示

2. 在Windows的DOS命令方式下计算机MD5 

三、SHA系列 

1.什么是SHA系列?SHA0、SHA1、SHA2、SHA3 

2.在Windows的DOS命令下计算SHA 

四、散列函数对比表 


一、散列函数

1.散列函数(Hash function)=散列算法、哈希函数

散列函数是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

2.散列碰撞(collision)

所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“散列碰撞(collision)”,这通常是两个不同长度的输入值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。

典型的散列函数都有非常大的定义域,比如SHA-2最高接受(264-1)/8长度的字节字符串。同时散列函数一定有着有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的单射。在密码学中,散列函数必须具有不可逆性。

 

二、MD5

1.MD5是什么?128位散列值[16字节]一般使用32位16进制表示

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm)

来源:https://baike.baidu.com/item/MD5 此网址有C、Java等程序的实现源代码

一种被广泛使用的密码散列函数,可以产生出一个128位的散列值(hash value)(16字节,MD5值通常的呈现为32十六进制数),eg:581b65637825ed2778b93dd05a03be14。它确保信息传输完整一致,是由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)1992年公开,取代MD4算法。1996年该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision在对两个不同的内容使用 MD5算法运算的时候,有可能得到一对相同的结果值),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通数据的加密保护领域

 

用于密码管理当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。为了增加安全性,有必要对数据库中需要保密的信息进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也不能得到原来的密码信息。

MD5算法可解决这个问题,它可将任意长度的输入串经过计算得到固定长度的输出,而且只有在明文相同的情况下,才能等到相同的密文,并且这个算法是不可逆的,即便得到了加密以后的密文,也不可能通过解密算法反算出明文。

这样就可以把用户的密码以MD5值(或类似的其它算法)的方式保存起来,用户注册的时候,系统是把用户输入的密码计算 MD5 值,然后再去和系统中保存的 MD5 值进行比较,如果密文相同,就可密码是正确的,否则密码错误。通过这步骤,系统在并不知道用户密码明码的情况下就可以确定用户登录系统的合法性。这样不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度

 

电子签名使用 MD5算法就可为任何文件(不管其大小、格式、数量)产生一个独一无二的“数字指纹”,借助这个“数字指纹”,通过检查文件前后 MD5 值是否发生了改变,就可以知道源文件是否被改动。

有时,在下载软件的时会发现,软件的下载页面上除了会提供软件的下载地址以外,还会给出一串长长的字符串。这串字符串其实就是该软件的MD5 值,它的作用就在于下载该软件后,对下载得到的文件用专门的软件(如 Windows MD5 check 等)做一次 MD5 校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用 MD5 算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

 

网盘文件的管理:在使用网盘时,我们发现一些超大文件。这其实利用MD5比如百度云盘服务器只认MD5码,不认文件名。你上传的文件大小和上传速度无关,只要你上传的文件MD5码和云盘服务器里的某个文件相同,就会默认为服务器里存储的那个文件,所需的上传时间不过是校检MD5码的过程,当然能实现秒传。如果你自己随便拍个小视频再去上传一下试试,速度慢到让你想砸电脑。


垃圾邮件筛选电子邮件使用越来越普遍的情况下,可以利用 MD5 算法在邮件接收服务器上进行垃圾邮件的筛选,以减少此类邮件的干扰,具体思路如下:

1.建立一个邮件 MD5 值资料库,分别储存邮件的 MD5 值、允许出现的次数(假定为 3)和出现次数(初值为零)。

2.对每一封收到的邮件,将它的正文部分进行MD5 计算,得到 MD5 值,将这个值在资料库中进行搜索。

3.如未发现相同的 MD5 值,说明此邮件是第一次收到,将此 MD5 值存入资料库,并将出现次数置为1,转到第五步。

4.如发现相同的 MD5 值,说明收到过同样内容的邮件,将出现次数加 1,并与允许出现次数相比较,如小于允许出现次数,就转到第五步。否则中止接收该邮件。结束。

5.发送邮件。

 

  1. 在Windows的DOS命令方式下计算机MD5

假如Linux,md5sum是默认的用来计算和校验文件报文摘要的程序。

我们复制两个完成一样的文件,做如下的实验:

C:\Users\DeepBlue>certutil -hashfile .\1.txt MD5

MD5 的 .\1.txt 哈希:

581b65637825ed2778b93dd05a03be14

CertUtil: -hashfile 命令成功完成。

 

C:\Users\DeepBlue>certutil -hashfile .\2.txt MD5

MD5 的 .\2.txt 哈希:

581b65637825ed2778b93dd05a03be14

CertUtil: -hashfile 命令成功完成。

假如我们修改一个文件中的一个字符,就会看到计算出的md5值是不一样的。


三、SHA系列

1.什么是SHA系列?SHA0、SHA1、SHA2、SHA3

SHA0、SHA1、SHA2、SHA3美国国家安全局(National Security Agency,NSA)设计。

SHA-1可以生成一个被称为消息摘要的160(20字节)散列值,散列值通常的呈现形式为40个十六进制1995年发布,SHA-1在许多安全协议中广为使用,包括TLSSSLPGPSSHS/MIMEIPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。但SHA-1的安全性在2000年以后已经不被大多数的加密场景所接受。

SHA-1已经不再视为可抵御有充足资金、充足计算资源的攻击者。2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够安全2017年荷兰密码学研究小组CWI 与Google宣布了一个成功的SHA-1碰撞攻击,发布了两份内容不同但SHA-1散列值相同的PDF文件作为证明这代表SHA-1算法已被正式攻破。MicrosoftGoogle以及Mozilla旗下的浏览器在2017年停止接受使用SHA-1算法签名的SSL证书

SHA-2:2001年发布,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。虽然至今尚未出现对SHA-2有效的攻击【2020年】SHA2的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。

SHA-3:2015年正式发布,SHA-3并不是要取代SHA-2,因为SHA-2当前并没有出现明显的弱点。由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的SHA-3。

 

2.在Windows的DOS命令下计算SHA

C:\Users\DeepBlue>certutil -hashfile .\1.txt SHA1SHA1为默认值,可以省略

SHA1 的 .\1.txt 哈希:

2af8c4d88ca28b30dcd952910cee2360c2c04fa4

CertUtil: -hashfile 命令成功完成。

C:\Users\DeepBlue>certutil -hashfile .\2.txt SHA1

SHA1 的 .\2.txt 哈希:

2af8c4d88ca28b30dcd952910cee2360c2c04fa4

CertUtil: -hashfile 命令成功完成。

 

C:\Users\DeepBlue>certutil -hashfile .\1.txt SHA256

SHA256 的 .\1.txt 哈希:

5b319761f561582e4021b03b7fc6582fbdcb088620b0ba090325e6c69759cb72

CertUtil: -hashfile 命令成功完成。

C:\Users\DeepBlue>certutil -hashfile .\2.txt SHA256

SHA256 的 .\2.txt 哈希:

5b319761f561582e4021b03b7fc6582fbdcb088620b0ba090325e6c69759cb72

CertUtil: -hashfile 命令成功完成。

 

C:\Users\DeepBlue>certutil -hashfile .\1.txt SHA512

SHA512 的 .\1.txt 哈希:

52c2f32aca5a97065134d907b01acc173c5383d45696fac020d60a2707917e7d32da946684553196c3b6b25556ae42be344dd351128e2dbcfd5a3ba3e20bc130

CertUtil: -hashfile 命令成功完成。

C:\Users\DeepBlue>certutil -hashfile .\2.txt SHA512

SHA512 的 .\2.txt 哈希:

52c2f32aca5a97065134d907b01acc173c5383d45696fac020d60a2707917e7d32da946684553196c3b6b25556ae42be344dd351128e2dbcfd5a3ba3e20bc130

CertUtil: -hashfile 命令成功完成。

 


四、散列函数对比表

算法和变体

输出散列值长度

中继散列值长度

数据区块长度

最大输入消息长度

循环次数

碰撞攻击

性能示例[3]

bits

bits

bits

bits

bits

(MiB/s)

MD5(作为参考)

128

128

512

无限[4]

64

≤18

335

(4 × 32)

发现碰撞

SHA-0

160

160

512

264 − 1

80

<34

-

(5 × 32)

发现碰撞

SHA-1

160

160

512

264 − 1

80

<63[5]

192

(5 × 32)

发现碰撞

SHA-2

SHA-224

224

256

512

264 − 1

64

112

139

SHA-256

256

(8 × 32)

128

SHA-384

384

512

1024

2128 − 1

80

192

154

SHA-512

512

(8 × 64)

256

SHA-512/224

224

 

112

SHA-512/256

256

 

128

SHA-3

SHA3-224

224

1600

1152

无限[7]

24[8]

112

-

SHA3-256

256

(5 × 5 × 64)

1088

128

SHA3-384

384

 

832

192

SHA3-512

512

 

576

256

SHAKE128

d (arbitrary)

 

1344

min(d/2, 128)

-

SHAKE256

d (arbitrary)

 

1088

min(d/2, 256)

 

此表来源于维基百科,

免翻网址:https://wikipediam.hk.wjbk.site/wiki/SHA%E5%AE%B6%E6%97%8F


版权声明:本文为jsqdsq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。