问题:数据库脱库了怎么办, 如何用哈希算法解决问题。
1. 什么是哈希算法?
哈希算法的定义和原理: 将任意长度的二进制值串映射为固定长度的二进制值串。
哈希算法要求:
- 从哈希值不能反向推导出原始数据
- 对输入数据敏感,哪怕改一个bit,得到的哈希值也大不相同;
- 散列冲突的概率要很小;
- 算法执行要高效。
2. 应用一:安全加密
常用加密算法:MD5,SHA。 除了这些,还有DES,AES。
为什么哈希算法无法做到零冲突?
以MD5为例,哈希值是固定的128位二进制串,最多表示2 ^ 128种数据,如果超过 2 ^ 128 + 1种,一定有两个数算得的哈希值相同。(抽屉原理,10个抽屉,11个东西,一定至少有一个抽屉有两个东西)
3. 应用二:唯一标识
如果要在海量的图库中,搜索一张图是否存在,我们不能单纯地用图片的元信息(比如图片名称)来比对,因为有可能存在名称相同但图片内容不同,或者名称不同图片内容相同的情况。那我们该如何搜索呢?
做法:取图片前100个字节,中间100个字节,后100个字节,算一个哈希值,作为唯一标识,判断图片是否在图库中。
4. 应用三:数据校验
BT下载。将文件分成若干文件块,分别取哈希值,保存在种子文件中。用户下载文件后,计算文件块得到哈希值,与种子文件中的比较,判断文件块不完整或被篡改了。
5. 应用四:散列函数
相对哈希算法,散列函数更加关心散列值是否更加均匀,计算速度是否更快,对散列冲突的容忍度比较高一点。
7.解答开篇
数据库脱裤后,可以使用撞库方法试密码,原因是很多用户的密码设置很简单,比如123456等等。
解决方法:加盐,原始密码加一个盐,组合之后,计算得到的哈希值。