在GWT/GWT-Ext中密码字符串的md5哈希?

Fra*_*nkS 4 javascript java gwt md5 gwt-ext

我目前正在尝试修改现有的GWT-Ext应用程序,即在其MySql数据库中使用纯文本密码.

我的计划是使用md5哈希,因为现有的密码可以通过MySql函数轻松更改,我期待为GWT-Ext方面找到一个简单的解决方案.但是正如我发现的那样,GWT不支持java.security,并且似乎没有任何其他实现可用于将密码字符串更改为客户端的md5哈希.

到目前为止,我发现只有"解决方案"是通过JSNI重新实现md5方法,如下所述:http: //groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/ad09475a9944c9f8

Ext-JS有一个现有的用户扩展,但我找不到GWT-Ext的任何内容:http://extjs.com/forum/showthread.php? p = 133516

有人知道更优雅/简单的方法来解决这个问题吗?也许我应该用别的东西而不是md5来确保密码加密?

干杯弗兰克

JP *_*son 9

就个人而言,我会说你做错了.我不会在客户端散列密码(这就是GWT).如果您对密码进行哈希处理,您无疑会想要加密密码,否则您将受到彩虹攻击.如果您在客户端哈希+盐,那么您的用户就可以访问您的盐.

如果我是你,我会在服务器端哈希密码.这将允许您使用标准Java代码来执行MD5哈希.

我的2美分.

-J.P


Tre*_*son 6

可能符合您需求的另一个想法是零知识认证.(即服务器永远不需要知道用户的纯文本密码.)

基本上,当设置初始密码时,客户端将用户的密码哈希值N次(其中N是大数字,如1000),然后将最终哈希值与N一起发送到服务器.服务器存储哈希值和N.

之后,当用户想要进行身份验证时,服务器会告知客户端N-1,并且客户端会将用户键入N-1次的密码哈希并将其发送到服务器.服务器在接收到的哈希上再做一次哈希,并且(希望)获得存储的哈希值.然后,服务器存储N-1个散列和N-1个号码.

每次用户进行身份验证时,服务器都会减少存储的N并保存先前的哈希值.

当N下降到0时,用户必须选择并设置新密码.

服务器必须确保它永远不会要求相同的迭代,否则它很容易重放.您无法从客户端实际强制执行该条件,因为客户端(尤其是浏览器)无法可靠地跟踪最后的N.