来自知乎的介绍:
HASH算法不是大学里数据结构课里那个HASH表的算法。这里的HASH算法是密码学的基础,比较常用的有MD5和SHA,最重要的两条性质,就是不可逆和无冲突。
- 所谓不可逆,就是当你知道x的HASH值,无法求出x;
- 所谓无冲突,就是当你知道x,无法求出一个y, 使x与y的HASH值相同。
这两条性质在数学上都是不成立的。因为一个函数必然可逆,且由于HASH函数的值域有限,理论上会有无穷多个不同的原始值,它们的hash值都相同。MD5和SHA做到的,是求逆和求冲突在计算上不可能,也就是正向计算很容易,而反向计算即使穷尽人类所有的计算资源都做不到。
我觉得密码学的几个算法(HASH、对称加密、非对称加密)是计算机科学领域最伟大的发明之一,它授予了弱小的个人在强权面前信息的安全(而且是绝对的安全)。举个例子,只要你一直使用https与国外站点通讯,并注意对方的公钥没有被篡改,G**W可以断开你的连接,但它永远不可能知道你们的传输内容是什么。
顺便说一下,王小云教授曾经成功制造出MD5的碰撞,即md5(a) = md5(b)。这样的碰撞只能随机生成,并不能根据一个已知的a求出b(即并没有破坏MD5的无冲突特性)。但这已经让他声名大噪了。
以下内容摘自简书:
1.摘要算法
简介:
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密
特点:
无论输入的消息有多长,计算出来的消息摘要的长度总是固定的
一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同,但相同的输入必会产生相同的输出
应用场景:
消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法,主要应用在密码存储、信息完整性校验等。
MD算法(Message Digest):
生成的消息摘要都是128位的
包括:MD2,MD4,MD5
SHA算法(Secure Hash Algorithm):
安全散列算法
固定长度摘要信息
SHA-1 | SHA-224 | SHA-256 | SHA-384 | SHA-512 |
---|---|---|---|---|
160 | 224 | 256 | 384 | 512 |
比较:
都是从MD4发展而来,它们的结构和强度等特性有很多相似之处
特性 | MD5 | SHA-1 |
---|---|---|
摘要长度 | 128 | 160 |
报文最大长度 | 无穷大 | 2^24-1 |
分组长度 | 512b | 512b |
循环中步骤 | 64 | 80 |
基本函数 | 4 | 4 |
2.对称加密算法
简介:
对称加密指加密和解密使用相同密钥的加密算法
特点:
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。
应用:
数据传输中的加密,防窃取
-
DES(Data Encryption Standard)
DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。 -
AES
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个
是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,运用最为广泛
比较:
AES弥补了DES很多的不足,支持秘钥变长,分组变长,更加的安全,对内存要求非常低
特性 | DES | AES |
---|---|---|
速度 | 中 | 快 |
秘钥长度 | 56b | 128~256(32倍数) |
分组长度 | 64b | 128~256(32倍数) |
是否可枚举破解 | 趋于可能 | 目前不可 |
3.非对称加密算法
简介:
非对称加密算法需要两个密钥:公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。用私钥进行加密,只有对应的公钥才能进行解密
特点:
算法强度复杂、安全性依赖于算法与密钥。但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
应用场景:
数字签名、秘钥传输加密
DH
非对称算法的基石,秘钥交换协议
RSA
非对称加密的经典,除了可用于非对称加密,也可用于数字签名
ECC
椭圆加密算法
比较:
使用RSA,可以进行加密和签名的密钥对。使用DH,只执行加密,没有签名机制。
ECC和 RSA 相比,在许多方面都有对绝对的优势
MD5算法介绍
消息摘要算法第五版(Message-Digest Algorithm 5,缩写MD5),是当前计算机领域用于确保信息传输完整一致而使用的散列算法之一(又译哈希算法,摘要算法),将数据运算变为另一固定长度值,是散列算法的基础原理;
MD5的前身有MD2、MD3和MD4。MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性。目前,MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通 数据的错误检查领域;
例如,服务器预先提供一个MD5校验和,用户下载完文件以后, 用MD5算法计算下载文件的MD5校验和,然后通过检查这两个校验和是否一致,就能判断下载的文件是否出错。
MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个 128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。
MD5算法的过程分为四步:处理原文,设置初始值,循环加工,拼接结果。
第一步:处理原文
在MD5算法中,首先需要对输入信息进行填充,使其位长对512求余的结果等于448,并且填充必须进行,即使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。
填充的方法如下:
1) 在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。
2) 在这个结果后面附加一个以64位二进制表示的填充前信息长度(单位为Bit),如果二进制表示的填充前信息长度超过64位,则取低64位。
经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。
第二步:设置初始值
MD5的哈希结果长度为128位,按每32位分成一组共4组。这4组结果是由4个初始值A、B、C、D经过不