![]() |
1
9
就个人而言,我会说你做错了。我不会在客户端散列密码(这就是GWT)。如果你散列你的密码,你无疑会想加盐,否则你将容易受到 rainbow 攻击。如果您在客户机端散列+盐,您的盐将可以被您的用户访问。 如果我是你,我会在服务器端散列+盐渍你的密码。这将允许您使用标准的Java代码来执行MD5哈希。 我的2美分。 JP |
![]() |
2
6
另一个适合你需要的想法是零知识认证。(即,服务器不需要知道用户的纯文本密码。) 基本上,当设置初始密码时,客户机将用户密码散列n次(其中n是一个较大的数字,如1000),然后将最终散列与n一起发送到服务器。服务器存储散列和n。 稍后,当用户想要进行身份验证时,服务器告诉客户机n-1,客户机散列用户键入n-1次的密码并将其发送给服务器。服务器对接收到的哈希再进行一次哈希,并(希望)获取存储的哈希。然后服务器存储n-1哈希和n-1数字。 每次用户进行身份验证时,服务器会减少存储的n并保存上一个哈希。 当n降至0时,用户必须选择并设置新密码。 服务器必须确保它从不请求相同的迭代,否则它容易受到重播的攻击。您不能从客户端强制执行该条件,因为客户端(尤其是浏览器)不能可靠地跟踪最后一个n。 |
![]() |
3
2
你可以使用 gwt-crypto 生成 SHA-1 客户端散列使用:
|
![]() |
4
0
不应使用MD5或其他哈希函数进行密码加密。见 http://codahale.com/how-to-safely-store-a-password/ |
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |