我在我的 Spring 应用程序中使用 Apache Shiro 作为我的安全层,我遇到了一个非常奇怪的情况。
首先,这就是我的安全系统的设置方式。当用户注册时,他们的密码会使用安全生成的随机盐进行哈希处理。然后将盐和散列密码存储在我的数据库中。当他们注册和登录时,一切都 100% 正常工作,但几天过去了,突然他们的散列密码不再匹配。这是我的代码:
import org.apache.shiro.codec.Base64;
import org.apache.shiro.crypto.hash.Sha256Hash;
public static void main(String[] args) {
String plainPassword = "testing";
String salt = "8AFTpriREtydSg39+37rQHNRyvZLuXqyXYgWXI55f1PbhbUQSeFGCLKsHpA6thZKs3uQeNNJHksqcV5oaNcr9lQiXMMyC8Duqr2aQaqyjLKpNMVlB69jJ7emNq0K6ccfBdv/O4JGT2U689LeNg6CqN+9kqW2GBgT2CIVOlapA34=";
System.out.println(new Sha256Hash(plainPassword.toCharArray(), Base64.decode(salt), 1024).toBase64());
}
生成的哈希密码为:
b8VLt/eKV8F5kwDjRgdkM+PAvQC8sk7Ooflt91juaXA=
但是我在数据库中的密码是:
xZNBNlUa8vRQq0qY5bbkETzZtzztGRTH2KZKijQdilU=
所以你可以想象,我完全被难住了。有谁知道我做错了什么?或者,如果我离开了一步。
更新 1:在我的系统中注册新用户后,系统中的所有其他用户似乎都因某种原因更改了密码。所以这与密码哈希的生成方式无关,更多的是与我的数据库访问层有关。