对于 CSDN 明文存储密码并测漏一事,我实在无力吐槽。
传统的直接md5(password)
弱爆了,密码字典一下子就查出来了。所以,希望大家能给我提供一些值得在今后开发中使用的密码加密规则。
我常用的方法是用户提交时,先用 JavaScript MD5 将密码在本地加密,提交到服务端,服务端取用户表中某个字段(比如注册时间)再加密一次md5(datetime+md5(password))
,存储二次加密后的密码,自认为这样相对安全,但还是觉得有些许不妥,希望能指出。
对于 CSDN 明文存储密码并测漏一事,我实在无力吐槽。
传统的直接md5(password)
弱爆了,密码字典一下子就查出来了。所以,希望大家能给我提供一些值得在今后开发中使用的密码加密规则。
我常用的方法是用户提交时,先用 JavaScript MD5 将密码在本地加密,提交到服务端,服务端取用户表中某个字段(比如注册时间)再加密一次md5(datetime+md5(password))
,存储二次加密后的密码,自认为这样相对安全,但还是觉得有些许不妥,希望能指出。
首先用明文保存用户密码非常不道德,而且做法很业余,万一被攻破用户要改的地方就多了。
应该说纯粹的md5哈希也已经非常不安全了,现在黑客们从各个站暴库而流传的地下猜解字典已经非常大了。所以国内对用户密码的处理普遍还处在一个非常初级的阶段,你只能寄希望于黑客别找上你。
现在国外比较流行的对密码的处理方法主要是在md5的基础上,加上一个随机的扰码(salt),这样你的密码哈希后的值也是随机的了,即便被别人拿到这个值,也无法还原出你真实的密码。在php上有很著名的phpass库(http://www.openwall.com/phpass/),目前wordpress就是使用的这种方法。
对纯哈希的研究,除了使用位数更大的hash以外(现在sha算法已经可以做到512位),还可以使用blowfish这种使用密码算子的算法。我记得看过一片文章介绍这种算法,因为它使用算子做计算,你可以根据自己服务器的运算速度,选择一个合适的算子组合,这样你可以控制它的运算时间,比如说在我的服务器上我需要0.5秒才能hash出结果,那如果别人拿这个hash值去做碰撞实验,基本上是不可能的结果,即便是用超级计算机也很慢了。不过这种算法的缺点就是太耗cpu了,一般网站没什么必要。
举报