如何安全的存储密码

栏目: 数据库 · 发布时间: 6年前

内容简介:层出不穷的用户密码数据库泄露事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。那么我来分析一下如何安全的存储密码呢?将明文密码做单向哈希后存储。单向哈希算法有一个特性,无法通过哈希后的字符串恢复原始数据,值得注意的是这是哈希算法而不是加密算法。常用的单向哈希算法包括MD5、SHA-256、SHA-1等。

描述

层出不穷的用户密码数据库泄露事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃。那么我来分析一下如何安全的存储密码呢?

入门方案

将明文密码做单向哈希后存储。

单向哈希算法有一个特性,无法通过哈希后的字符串恢复原始数据,值得注意的是这是哈希算法而不是加密算法。常用的单向哈希算法包括MD5、SHA-256、SHA-1等。

例如,对密码 “hooyes” 进行MD5哈希后的字符串如下: “0be67d59cd4a5ff3e582761941472c1b”

单向哈希有两个特性:

1.从同一个密码进行单向哈希,得到的总是唯一确定的字符串并且长度都是一样。

2.计算速度快。随着技术进步,一般的计算机都能够完成数十亿每秒单向哈希计算。

结合上面两个特点,考虑到多数人所使用的密码为常见的组合,攻击者可以将所有密码的常见组合进行单向哈希,得到一个摘要组合, 然后与数据库中的摘要进行比对即可获得对应的密码。这个摘要组合也被称为rainbow table。 换句更通俗的话来说,只要看到这一串 “0be67d59cd4a5ff3e582761941472c1b” 不管在哪家数据库,那轻易的就能知道密码是 “hooyes”。

所以进行简单的哈希存储后,如果泄漏了数据库,这样的密码存储依然是不够安全的。

进阶方案

将明文密码混入 “随机因素” ,然后进行单向哈希后存储,也就是所谓的 “Salted Hash”,给密码加点 “盐” 。

如此一来,每个数据库使用不同的 “Salted”,因为两个同样使用 “hooyes” 作为密码的账户,在数据库中存储的摘要完全不同。

“Salted” 的使用也分两种,一种是整个库都使用一个 Salted ,另一种是每一个密码都使用一个随机的 Salted

作为进阶方案肯定推荐的是每个密码一个随机的 Salted 并且即便是同一个密码,修改后 Salted 也随之改变,这样即便 “暴库” 密码也是比较安全的。

依然以密码 hooyes 为例

用户1,明文密码为:hooyes,随机因数为:ABC ;

第一步: 计算Hash的时候这样计算 MD5(ABC+hooyes),得到Hash串为: 10ffe002278720f03cd608f23e58761a

第二步:把随机因素混入Hash串, 得到最终要存储的字符串 ABC10ffe002278720f03cd608f23e58761a

(这里示例Salted放到前部,还可以设置复杂的规则)

用户2,明文密码为:hooyes,随机因数为:EFG ;

第一步: 计算Hash的时候这样计算 MD5(EGF+hooyes),得到Hash串为: 5caa48066e9e991af2f322141a9d3d21

第二步:把随机因素混入Hash串, 得到最终要存储的字符串 EFG5caa48066e9e991af2f322141a9d3d21

这样做的好处,显而易见即便不同用户使用相当密码,存储起来也是独一无二的, 并且不容易被破解,本文示例使用简单MD5哈希一次,只为了描述安全原理,具体实践中可以根据需求使用MD5多次哈希,甚至可以与SHA-256等混合使用。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

走进搜索引擎

走进搜索引擎

梁斌 / 电子工业出版社 / 2007-1 / 49.80元

《走进搜索引擎》由搜索引擎开发研究领域年轻而有活力的科学家精心编写,作者将自己对搜索引擎的深刻理解和实际应用巧妙地结合,使得从未接触过搜索引擎原理的读者也能够轻松地在搜索引擎的大厦中邀游一番。《走进搜索引擎》作为搜索引擎原理与技术的入门书籍,面向那些有志从事搜索引擎行业的青年学生、需要完整理解并优化搜索引擎的专业技术人员、搜索引擎的营销人员,以及网站的负责人等。《走进搜索引擎》是从事搜索引擎开发的......一起来看看 《走进搜索引擎》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换