本文主要介绍Hash算法
Hash介绍
Hash,一般翻译做“散列”
,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出
,该输出就是散列值
。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出
,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数
。
简单来说,hash算法(即散列函数),是一种单向密码体制
,即它是一个从明文到密文的不可逆的映射
,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。
Hash的特点
-
算法是公开的
-
对
相同数据
运算,得到的结果是一样
的(同样的数据,得到的结果是一样的) -
对
不同数据
运算,得到的结果是定长
的,如MD5得到的结果默认是128位,32个字符
(16进制标识)。 -
无法逆运算
-
是信息摘要、信息
“指纹”
,是用来做数据识别的、完整性检查的。
Hash用途
- 1、用户密码的加密
- 2、搜索引擎
- 3、版权
- 4、数字签名
- …
数据传输/存储原则:网络传输数据 + 本地保存数据 + 服务端保存数据等
,这些是隐私数据,绝对不能明文,一定是密文传输/存储。
作为一个iOS开发者,我自己也有总结归纳很多在这条路上要用到的进阶学习资源,文档视频资源等等,这里我免费分享给大家点击领取
常见的Hash算法
常见的hash算法主要有MD5、SHA-1、SHA-256、SHA-512等
MD5
MD4
(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年设计的,MD 是 Message Digest(消息摘要)
的缩写。它适用在32位
字长的处理器上用高速软件实现——它是基于 32位操作数的位操作来实现的。
MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组
,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好。
Message Digest Algorithm MD5(消息摘要算法5)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。是计算机广泛使用的杂凑算法之一,将数据(如汉字)运算为另一固定长度值
,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
特点
-
1、
压缩性
:任意长度的数据,算出的MD5值长度都是固定的。 -
2、
容易计算
:从原数据计算出MD5值很容易。 -
3、
抗修改性
:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 -
4、
强抗碰撞
:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
应用场景
-
一致性验证
-
数字签名
-
安全访问认证
SHA-1、SHA-256、SHA-512
安全哈希算法(Secure Hash Algorithm)
主要适用于数字签名标准里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要
。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA1
是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值
,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。
SHA-2 SHA-224、SHA-256
、SHA-384,和SHA-512
并称为SHA-2。 新的哈希函数并没有接受像SHA-1一样的公众密码社区做详细的检验,所以它们的密码安全性还不被大家广泛的信任。 虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的哈希算法。
注:这里只做简单介绍,并不展开详细说明,有兴趣的可以参考以下链接