【问题标题】:how to get/set the salt for a JdbcRealm如何获取/设置 JdbcRealm 的盐
【发布时间】:2012-03-05 05:02:37
【问题描述】:

我正在尝试使用 Shiro JdbcRealm 和 SHA256 hashedcredentialsMatcher。我需要更新旧数据库并为每个用户分配适当的盐(通过批处理例程)。

如何使用 Shiro 框架获取/设置给定帐户的 salt?

【问题讨论】:

    标签: java shiro salt jdbcrealm


    【解决方案1】:

    可能有点晚了:

    看看这个tutorial
    拥有该博客的 Meri 准确地描述了如何创建自己的salted JDBC Realm

    这也是社区中公认的improvement 1.3.0 版。

    希望这会有所帮助,玩得开心!

    【讨论】:

      【解决方案2】:

      使用 Shiro 1.2.3,您只需:

      1. 扩展 JdbcRealm 并设置 salt 样式。

        public class JdbcSaltRealm extends JdbcRealm {
            public JdbcSaltRealm() {
                setSaltStyle(SaltStyle.COLUMN);
            }
        }
        
      2. 更新shiro.ini以使用扩展领域并从数据库中获取盐列

        credentialsMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher
        credentialsMatcher.hashAlgorithmName = SHA-256
        jdbcRealm = com.mypackage.JdbcSaltRealm
        jdbcRealm.authenticationQuery = SELECT password, salt FROM user WHERE username = ?
        jdbcRealm.credentialsMatcher = $credentialsMatcher
        
      3. 哈希和加盐当前/新用户密码。这应该对所有现有用户以及新用户注册进行。

        private void saltHashPassword(String password) {
        
            String salt = new BigInteger(250, new SecureRandom()).toString(32);
        
            //TODO: save salt value to "salt" column in user table
        
            Sha256Hash hash = new Sha256Hash(password, 
                                  (new SimpleByteSource(salt)).getBytes());
            String saltedHashedPassword = hash.toHex();
        
            //TODO: save saltedHashedPassword value to "password" column in user table
        }
        

      希望我的回答清晰易懂。

      【讨论】:

        猜你喜欢
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 2016-06-01
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2011-09-10
        相关资源
        最近更新 更多