当前位置:主页 > 基础算法
如何正确对用户密码进行加密?
日期:2017-12-06 浏览量:

本文介绍了对密码哈希加密的基础知识,以及什么是正确的加密方式。还介绍了常见的密码破解方法,给出了如何避免密码被破解的思路。相信读者阅读本文后,就会对密码的加密有一个正确的认识,并对密码正确进行加密措施。

本文由Defuse Security安全团队撰写,作者采用了 CC协议 ,InfoQ翻译并分享,以飨读者。

作为一名Web开发人员,我们经常需要与用户的帐号系统打交道,而这其中最大的挑战就是如何保护用户的密码。经常会看到用户账户数据库频繁被黑,所以我们必须采取一些措施来保护用户密码,以免导致不必要的数据泄露。保护密码的最好办法是使用加盐密码哈希( salted password hashing)。

相关厂商内容

百度AI技能渠道体系首席研究员的重构分享 分还是合?58到家订单中心架构演进 架构优化!爱奇艺面对流量洪峰的三板斧 摩拜单车:如何通过机器学习等技术提高单车运营效率

相关赞助商

在对密码进行哈希加密的问题上,人们有很多争论和误解,可能是由于网络上有大量错误信息的原因吧。对密码哈希加密是一件很简单的事,但很多人都犯了错。本文将会重点分享如何进行正确加密用户密码。

重要警告:请放弃编写自己的密码哈希加密代码的念头!因为这件事太容易搞砸了。就算你在大学学过密码学的知识,也应该遵循这个警告。所有人都要谨记这点:不要自己写哈希加密算法! 存储密码的相关问题已经有了成熟的解决方案,就是使用 phpass,或者在 defuse/password-hashing 或 libsodium 上的 PHP 、 C# 、 Java 和 Ruby 的实现。

密码哈希是什么?hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366 hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542

哈希算法是一种单向函数。它把任意数量的数据转换为固定长度的“指纹”,而且这个过程无法逆转。它们有这样的特性:如果输入发生了一点改变,由此产生的哈希值会完全不同(参见上面的例子)。这个特性很适合用来存储密码。因为我们需要一种不可逆的算法来加密存储的密码,同时保证我们也能够验证用户登陆的密码是否正确。

在基于哈希加密的帐号系统中,用户注册和认证的大致流程如下。

用户创建自己的帐号。

密码经过哈希加密后存储在数据库中。密码一旦写入到磁盘,任何时候都不允许是明文形式。

当用户试图登录时,系统从数据库取出已经加密的密码,和经过哈希加密的用户输入的密码进行对比。

如果哈希值相同,用户将被授予访问权限。否则,告知用户他们输入的登陆凭据无效。

每当有人试图尝试登陆,就重复步骤3和4。

在步骤4中,永远不要告诉用户输错的究竟是用户名还是密码。就像通用的提示那样,始终显示:“无效的用户名或密码。”就行了。这样可以防止攻击者在不知道密码的情况下枚举出有效的用户名。

应当注意的是,用来保护密码的哈希函数,和数据结构课学到的哈希函数是不同的。例如,实现哈希表的哈希函数设计目的是快速查找,而非安全性。只有加密哈希函数( cryptographic hash function)才可以用来进行密码哈希加密。像 SHA256 、 SHA512 、 RIPEMD 和 WHIRLPOOL 都是加密哈希函数。

人们很容易认为,Web开发人员所做的就是:只需通过执行加密哈希函数就可以让用户密码得以安全。然而并不是这样。有很多方法可以从简单的哈希值中快速恢复出明文的密码。有几种易于实施的技术,使这些“破解”的效率大为降低。网上有这种专门破解MD5的网站,只需提交一个哈希值,不到一秒钟就能得到破解的结果。显然,单纯的对密码进行哈希加密远远达不到我们的安全要求。下一节将讨论一些用来破解简单密码哈希常用的手段。

如何破解哈希? 字典攻击和暴力攻击( Dictionary and Brute Force Attacks)

字典攻击

 

暴力攻击

 

Trying apple : failed

 

Trying aaaa : failed

 

Trying blueberry : failed

 

Trying aaab : failed

 

Trying justinbeiber : failed

 

Trying aaac : failed

 

 

 

Trying letmein : failed

 

Trying acdb : failed

 

Trying s3cr3t : success!

 

Trying acdc : success!

 
相关文章:
·2017年高性能科学计算基础算法与可计算建模重大
·他设计的并行算法为大数据技术奠定基础
·人机大战人脸识别比拼复盘胜负手不在双方算法
·何宝宏:人工智能有三大基础力量 新数据 新硬件
·人工智能产品化的关键是基础架构和数据,而非
→ 特别推荐
2017年高性能科学计算
他设计的并行算法为
人机大战人脸识别比
何宝宏:人工智能有
人工智能产品化的关
算法基础之每周算法
互联网真的不安全 基
从内容生产、内容平
示波器基础系列之十
AI·算法·伦理:发明
菜鸟CTO王文彬:未来
厉害了Word谷歌!攻破
游戏与算法的必经之
基础算法题,求思路
《计算机算法基础》
→ 热点TOP10
谁“杀死”了
万科最新大数
中国开启“人
无痛的增强学
中国亟需修改
建阳区初步完
瓦力超级大脑
2017年公务员基
阿富汗一民营
这家公司将损

友情链接/网站合作咨询: