【问题标题】:Keeping user passwords safe in Java?在 Java 中保持用户密码安全?
【发布时间】:2011-09-18 04:38:17
【问题描述】:

当我需要选择一种方法来安全地将用户密码保存在数据库中并能够在用户登录网站时检查它们是否匹配时,我已经到了这样的地步。

我目前正在使用 Spring 2.5,但正在慢慢升级到 Spring 3。你会建议我什么来保证密码的安全?我知道这个问题已经在这里和那里以类似的形式得到了回答,但我希望看到一些关于如何做到这一点的准确、最新答案,这也可以防止今天的密码黑客攻击技术。

用盐散列密码的最合适方法是什么?我的意思是如果有的话最好使用什么算法?我应该改用bcrypt,而jBCrypt 是一个很好的库吗?有没有更好的方法来保护密码?使用Jasypt 怎么样?您使用什么技术来安全地存储用户密码?

编辑:尽管我没有得到非常有趣和详细的答案,但我还是选择了 bcrypt/jBCrypt,因为它似乎是最好的选择。欢迎讨论。

【问题讨论】:

  • 这篇文章有一些关于用盐哈希密码的重要信息:owasp.org/index.php/Hashing_Java
  • 如果bcrypt 建议不要使用盐的密码散列,你不觉得它已经过时了吗?
  • 我不确定,现在看 jbcrypt 看起来不是很成熟。我让其他人来回答。
  • @Richards:不,使用盐的散列并不是一种过时的技术。整个想法是您在密码+盐上使用单向功能。如果使用安全散列函数,这使得很难找到原始密码。并且永远不要将密码存储为明文!
  • @netrom,是的,很明显我不能将它们存储为纯文本! ;P 我想通过一个例子看到一些好的答案。 ://

标签: java security passwords hash


【解决方案1】:

是的,您应该使用 bcrypt/jBCrypt。 bcrypt 是专门为慢速设计的,因此破解密码需要很长时间。

请参阅this blog post,了解您可以在使用 bcrypt 进行密码散列的基础上使用的额外措施。

【讨论】:

    【解决方案2】:

    SpringSecurity 支持 password encoding 使用散列和盐。

    【讨论】:

    • 您还有什么想说的吗?我听说过 Spring Security 作为一个名字,并想象一下它的作用。它有多好?优点和缺点?不好..
    • @Richards:这是一个相当不错且功能齐全的网络安全框架。 Apache Shiro 应该更易于使用,但由于您已经在使用 Spring,因此 Spring Security 应该非常适合。我最近正好满足您的要求,效果很好。
    • 有利于实现简单的身份验证/访问控制模型。对于更复杂的模型,由于“命名空间”配置方案的不灵活和不透明,事情可能会变得有些棘手。
    • 我会推荐 shiro 用于 ACL,spring-security 并且它的 acl 模型很难使用恕我直言。
    【解决方案3】:

    您可以使用 md5 对其进行哈希处理 代码:

    public static String StringHashing(String s) {
    
        MessageDigest m = null;
        try {
            m = MessageDigest.getInstance("MD5");
    
        } catch (NoSuchAlgorithmException ex) {
    
        }
        m.update(s.getBytes(), 0, s.length());
        return (new BigInteger(1, m.digest()).toString(16));
    
    }
    

    【讨论】:

    • md5 容易受到彩虹表攻击。请参阅hacking-gurus.net/2009/04/30/crack-md5-password-hash-online 获取 md5 破解站点的链接列表。
    • @Richards:改用SHA-1SHA-256SHA-512
    • @netrom:是的,但是在这里提供如此糟糕的信息让很多用户可能会检查这个答案是非常愚蠢的。
    • MD5 和 SHA-* 都存在散列速度极快的问题,因此容易受到暴力字典攻击。
    • @ericacm 但是破解一个 SHA 哈希仍然需要付出很多努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多