客户端密码加密
可能重复:
关于客户端的密码散列系统
我必须保护我的网站用户的密码。 我所做的是在服务器端使用MD5加密哈希。 但问题在于密码在到达服务器之前仍以纯文本形式保留,这意味着可以使用流量监控来捕获密码。 所以我想要的是使用客户端密码加密/散列机制并发送加密/哈希密码。 任何人都可以告诉做什么方式?
这不是安全的,并且很容易解释为什么:
如果您在客户端散列密码并使用该令牌代替密码,那么攻击者将不可能找出密码。
但是,攻击者不需要知道密码是什么,因为你的服务器不再期待密码 - 它期望的是密码。 攻击者确实知道该令牌,因为它是通过未加密的HTTP发送的!
现在,有可能将某种挑战/响应形式的加密一起破解,这意味着相同的密码会在每个请求中产生不同的令牌。 但是,这将要求密码在服务器上以可解密的格式存储,这是不理想的,但可能是一种合适的折衷方案。
最后,你是否真的想要求用户在登录到你的网站之前开启javascript?
无论如何,SSL既不是昂贵的,也不是特别难以设置解决方案
您需要一个可以在客户端加密输入并以加密形式将其传输到服务器的库。
你可以使用下面的库:
3年后更新:
4年后更新(Wohoo!)
仍然不相信? 我也不 :)
我会选择这个简单的解决方案。
总结它:
#S
并将其发送给客户端 h(pw)
(这是存储在数据库中的) #C
h(pw) + #S + #C
并计算其散列值,称之为h(all)
username
#C
和h(all)
username
检索h(pw)'
h(all')
的元素,就像客户端一样 h(all)
= h(all')
然后h(pw)
= h(pw)'
,几乎可以肯定 没有人可以重复请求以指定的用户身份登录。 #S
每次都会向散列中添加一个可变组件(这是基础)。 #C
增加了额外的噪音。