1

我正在尝试为我的应用程序创建一个登录窗口,并查看网络我发现 JPasswordField.getText() 已被弃用,因为通过使用该方法将密码字符串插入字符串池,这显然并不酷。所以我想使用 JPasswordField.getPassword() 代替它返回一个字符数组。现在到我的问题。我的密码位于数据库中的一个表中,所以通过执行 rs.getString() 我实际上仍然将我的密码放入字符串池中,有没有办法从 resultSet 中检索一个字符数组,或者什么会更好用于检索真实密码的想法,以便我可以比较它们?

-谢谢。

4

2 回答 2

2

我会将加盐的散列密码存储在数据库中,而不必担心我将散列密码放入字符串池中。比较哈希值。

于 2013-09-24T21:04:17.333 回答
1

在您的数据库中,您应该为每个用户名存储两件事:哈希

salt 应该是随机生成的垃圾字符串,您将其附加到用户输入的密码中。散列应该是带有附加盐的密码的散列(最好是 sha256 或更强 - 不要使用 MD5!)。

例子:

salt: dbIL%#JBD"ncON$SOcl)=?NJ!A
pass: helloworld123
string to hash: helloworld123dbIL%#JBD"ncON$SOcl)=?NJ!A
sha256 hash of the above string: 0bf4e6a0d9fb5c7f1f6becb107af068684b6373ed1489663c335bb87280403d9

然后,当您想要检查用户是否输入了正确的密码时,从数据库中获取 salt,对输入的密码进行哈希处理(如示例所示),并将该哈希值与数据库中存储的哈希值进行比较。如果它们匹配,则用户输入了正确的密码。

于 2013-09-24T21:17:10.923 回答