如何在Grails项目中使用PHP生成的Salt

时间:2013-03-02 15:45:48

标签: php grails spring-security salt

我有一个PHP应用程序,我正在转换为Grails。 PHP应用程序使用salt机制来编码其所有用户的密码。

将盐和盐渍密码移动到Grails中的(自定义)用户数据库时,我无法在Grails应用程序中登录。

当然,我正在使用Spring Security Core plugin,并且我已经在this tutorial中指定的用户域类中添加了salt,我在此处找到了Grails with Spring Security Plugin and Salted Passwords

完成本教程后,我可以添加用户并成功登录该用户:

[BootStrap.groovy]:
new User( username:"user", email:"user@place.com", password:"password", enabled:true).save(flush: true)

(您可能还会注意到我添加了使用this tutorial添加的电子邮件)

但我无法使用从PHP项目转移的任何用户登录。如果它有任何帮助,这里是他们的密码编码方式:

$password = "password";
$salt = bin2hex( openssl_random_pseudo_bytes( 32 ) );
$passwordSalted = hash( "sha256", $salt . $password );

1 个答案:

答案 0 :(得分:1)

看起来伯特在这里提出了他的建议:http://grails.1312388.n4.nabble.com/Spring-Security-Core-plugin-and-multiple-salt-sources-tc3638236.html#a3646256

基本上,我已经从上面提到的教程中提供了自己的盐,我只需要使用自定义密码编码器将其与密码结合使用。

public class CustomPasswordEncoder extends MessageDigestPasswordEncoder {

    public CustomPasswordEncoder() {
        super("SHA-256");
    }

    @Override
    protected String mergePasswordAndSalt(String password, Object salt, boolean strict) {
        if (password == null) {
            password = "";
        }

        if (salt == null || "".equals(salt)) {
            return password;
        }

        return salt + password;
    }
}