私は春のセキュリティでハッシュコード隠密方法を書いています。その方法では、ソルト値と反復サイズをデータベースに保存します。次回は普通のパスワードでユーザーがログインすると、データベースからソルト値と繰り返しを使用し、パスワードをダイジェストします。しかし、このメソッドは、たとえ塩と反復の値が同じであっても、異なる世代のハッシュコードです。Digesterが同じメッセージ、コード、繰り返しに対して異なるハッシュコードを生成している理由
public Administrator encryptDigestCode(Administrator administrator) {
StandardStringDigester digester = new StandardStringDigester();
Administrator admin = new Administrator();
digester.setAlgorithm("SHA-256");
digester.setStringOutputType("base64");
Random ran = new Random();
int iterate = ran.nextInt(1000);
digester.setIterations(iterate);
RandomSaltGenerator ram = new RandomSaltGenerator();
byte[] salt = ram.generateSalt(10);
String pass = new String(salt) + administrator.getHashedPassword();
String encryptedPassword = digester.digest(pass);
if (digester.matches(administrator.getHashedPassword(),
encryptedPassword)) {
admin.setLoginDetail(new LoginDetail());
admin.getLoginDetail().setSalt(new String(ram.generateSalt(10)));
admin.getLoginDetail().setHashingCycle(iterate);
admin.setUserName(administrator.getUsername());
admin.setSesamiagreementno(administrator.getSesamiagreementno());
admin.setHashedPassword(encryptedPassword);
} else {
admin.setLoginDetail(null);
admin.setHashedPassword(null);
admin.setUserName(null);
}
return admin;
}
どうすればよいですか?参照用のコードまたはサイト。ありがとう
実際のコードは、呼び出すたびに新しいランダムな塩を生成するコードではなく、ポストする必要があります。 –
OK、塩の保存方法を指定しないため-1。 –