首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码字符串在GWT/GWT-Ext中的md5哈希?

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

Stack Overflow用户
提问于 2009-08-06 12:43:32
回答 5查看 9.5K关注 0票数 4

我目前正在尝试修改一个现有的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来确保密码是加密的?

干杯弗兰克

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-06 17:17:09

就我个人而言,我会说你做错了。我不会在客户端散列密码(这就是GWT )。如果你散列你的密码,你无疑会想要对它加盐,否则你将容易受到rainbow攻击。如果你在客户端散列加盐,你的盐将会被你的用户访问。

如果我是你,我会在服务器端对你的密码进行哈希加盐。这将允许您使用您的标准Java代码来执行MD5散列。

我的两分钱。

-JP

票数 9
EN

Stack Overflow用户

发布于 2009-08-07 00:14:29

另一个可能适合你需要的想法是所谓的零知识认证。(即服务器永远不需要知道用户的明文密码。)

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

稍后,当用户想要进行身份验证时,服务器告诉客户端N-1,客户端将用户键入的密码散列N-1次并将其发送到服务器。服务器对收到的哈希值再做1次哈希运算,并(希望)获得存储的哈希值。然后,服务器存储N-1个散列和N-1个数字。

每次用户进行身份验证时,服务器都会递减存储的N并保存先前的散列。

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

服务器必须确保它永远不会请求相同的迭代,否则它很容易受到重播的影响。您不能真正从客户端强制执行该条件,因为客户端(尤其是浏览器)不能可靠地跟踪最后的N。

票数 6
EN

Stack Overflow用户

发布于 2011-11-03 08:10:21

您可以使用gwt-crypto在客户端生成SHA-1散列,方法如下:

代码语言:javascript
复制
String getSHA1for(String text) {
  SHA1Digest sd = new SHA1Digest();
  byte[] bs = text.getBytes();
  sd.update(bs, 0, bs.length);
  byte[] result = new byte[20];
  sd.doFinal(result, 0);
  return byteArrayToHexString(result);
}

String byteArrayToHexString(final byte[] b) {
  final StringBuffer sb = new StringBuffer(b.length * 2);
  for (int i = 0, len = b.length; i < len; i++) {
    int v = b[i] & 0xff;
    if (v < 16) sb.append('0');
    sb.append(Integer.toHexString(v));
  }
  return sb.toString();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1238628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档