如何从ResultSet中检索char数组?

时间:2013-09-24 20:58:01

标签: java database resultset jpasswordfield

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

-Thanks。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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,使用附加的哈希输入的密码(如示例所示)并将此哈希值与数据库中存储的哈希值进行比较。如果匹配,则用户输入正确的密码。