哈希算法(上):如何防止数据库中的用户信息被脱库?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程
哈希算法历史悠久,业界著名的哈希算法也很多,比如MD5、SHA等。在我们平时的开发中,基本上都是拿现成的直接用。今天不会重点剖析哈希算法的原理,也不会教你如何设计一个哈希算法,而是从实战角度告诉你,在实际开发中,我们该如何用哈希算法解决问题。

什么是哈希算法?

我们前面讲到的“散列表”、“散列函数”,这里又讲到“哈希算法”,你是不是有点一头雾水?实际上,它们的英文就是“Hash”,只是中文翻译的差别。

什么是哈希算法,用一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个映射规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。但是,要设计一个优秀的哈希算法并不容易,我了需要满足的几点要求:

从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);
对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同;
散列总被的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;
哈希算法的执行效率尽量高效,针对较长的文本,也能快速计算出哈希值。

咱拿MD5这种哈希算法具体说明下,比如计算这两个文本的MD5哈希值——“今天我来讲哈希算法”、“jiajia"。得到的两串毫无规律的字符串(MD5的哈希值是128位的Bit长度,便于表示,转化为16进制编码)。可以看出,无论文本的长度是多少,得到的哈希值长度是相同的,而且看起来像一堆随机数,完全没有规律。

MD5("今天我来讲哈希算法") = bb4767201ad42c74e650c1b6c03d78fa
MD5("jiajia") = cd611a31ea969b908932d44d126d195b

我们试试两个很相似的文本

MD5("我今天讲哈希算法!") = 425f0d5a917188d2c3c3dc85b5e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值