我目前正在使用 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) 方法返回一个纯字符串。那么我错过了什么?