散列函数 和 文件比较
目录
1.散列函数(Hash function)=散列算法、哈希函数
1.MD5是什么?128位散列值[16字节]一般使用32位16进制表示
1.什么是SHA系列?SHA0、SHA1、SHA2、SHA3
一、散列函数
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码的过程,当然能实现秒传。如果你自己随便拍个小视频再去上传一下试试,速度慢到让你想砸电脑。
|
假如在Linux中,md5sum是默认的用来计算和校验文件报文摘要的程序。
我们复制两个完成一样的文件,做如下的实验:
假如我们修改一个文件中的一个字符,就会看到计算出的md5值是不一样的。 |
三、SHA系列
1.什么是SHA系列?SHA0、SHA1、SHA2、SHA3
SHA0、SHA1、SHA2、SHA3美国国家安全局(National Security Agency,NSA)设计。 SHA-1:可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。1995年发布,SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。但SHA-1的安全性在2000年以后已经不被大多数的加密场景所接受。 SHA-1已经不再视为可抵御有充足资金、充足计算资源的攻击者。2005年,密码分析人员发现了对SHA-1的有效攻击方法,这表明该算法可能不够安全。2017年荷兰密码学研究小组CWI 与Google宣布了一个成功的SHA-1碰撞攻击,发布了两份内容不同但SHA-1散列值相同的PDF文件作为证明。这代表SHA-1算法已被正式攻破。Microsoft、Google以及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 SHA1【SHA1为默认值,可以省略】 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 命令成功完成。 |
四、散列函数对比表
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
此表来源于维基百科,
免翻网址:https://wikipediam.hk.wjbk.site/wiki/SHA%E5%AE%B6%E6%97%8F。