Spring アプリのセキュリティ レイヤーとして Apache Shiro を使用していますが、非常に奇妙な状況に遭遇しています。
まず、これが私のセキュリティシステムのセットアップ方法です。ユーザーが登録すると、パスワードは安全に生成されたランダム ソルトでハッシュされます。ソルトとハッシュ化されたパスワードは、DB に保存されます。登録するとすべてが 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: システムに新しいユーザーを登録した後、何らかの理由でシステム内の他のすべてのユーザーのパスワードが変更されたようです。したがって、これはパスワード ハッシュが生成される方法とは関係なく、データベース アクセス レイヤーと関係があります。