我正在使用Apache Shiro作为我的Spring应用程序的安全层,但遇到了一个非常奇怪的情况。
首先,这是我的安全系统设置方式。当用户注册时,他们的密码将使用安全生成的随机盐进行哈希处理。然后将盐和哈希密码存储在我的数据库中。当他们注册并登录时,一切都正常运行,但是几天过去了,突然间他们的哈希密码不再匹配。以下是我的代码:
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:在我的系统中注册新用户后,似乎所有其他用户的密码出于某种原因被更改了。因此,这与生成密码哈希的方式无关,而更多地与我的数据库访问层有关。