私は現在、Dao パターンを使用して mysql データベースと組み合わせた Java プログラムを開発しています。テーブルに保存するユーザー情報があり、元のパスワード文字列の Sha1 ハッシュ バージョンを保存しています。私はそれを行うために apache.commons.codec.digest.DigestUtils を使用しています。php-mysql で表示される文字列は完璧ですが、Java テスト プログラムで同じ文字列を表示しようとすると、まったく異なる結果になります。
ユーザーオブジェクトのコンストラクターは次のとおりです。
public User(int id, String name, String firstName, String email, String login, String password)
{
super(id, name, firstName);
this.email = email;
this.login = login;
//Convert the password to SHA1 before storing it in the object
//using Apache commons-codec-1.9 lib
this.hashedPassword = DigestUtils.sha1Hex(password);
}
たとえば、パスワードとして「aff」を使用してユーザーを作成する場合、
User user1 = new User(1, "Durand", "Jack", "jack.durand@mymail.com", "jack", "aff");
mysql で "0c05aa56405c447e6678b7f3127febde5c3a9238" が表示されますが、これは正しく、オンライン sha1 ハッシャーの出力と同じです。
しかし、データをオブジェクトに読み込んで、Java の Sysout(User.getPassword()) で表示すると、明らかに同じではない "c14b77e8930a8bfd884c8917f2b7335501a39dde" が表示されます。
これを引き起こしている原因について何か考えはありますか?Byte[] の問題に関する以前の投稿をいくつか読みましたが、DigestUtils.sha1Hex(password) メソッドはプレーンな文字列を返すと言われています。それで、私は何が欠けていますか?