如何获取/设置 JdbcRealm 的盐

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

可能有点晚了:

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

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

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

【讨论】:

【参考方案2】:

使用 Shiro 1.2.3,您只需:

    扩展 JdbcRealm 并设置 salt 样式。

    public class JdbcSaltRealm extends JdbcRealm 
        public JdbcSaltRealm() 
            setSaltStyle(SaltStyle.COLUMN);
        
    
    

    更新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
    

    哈希和加盐当前/新用户密码。这应该对所有现有用户以及新用户注册进行。

    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
    
    

希望我的回答清晰易懂。

【讨论】:

以上是关于如何获取/设置 JdbcRealm 的盐的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Shiro 中使用 JdbcRealm 对提交的密码进行哈希处理?

如何从数据库中储存和使用 shiro 的盐

为啥 Ruby 的 bcrypt 库在哈希中包含明文中的盐? [复制]

如何将python字符串更改为无符号字符数组?

如何获取 KDE 代理设置

python 如何获取url信息