无法将java中的密码字段与oracle数据库匹配
我正在尝试使用Java中的Swing构建一个简单的登录表单。我创建了一个带有两个字段的示例表单无法将java中的密码字段与oracle数据库匹配,java,database,passwords,string-matching,Java,Database,Passwords,String Matching,我正在尝试使用Java中的Swing构建一个简单的登录表单。我创建了一个带有两个字段的示例表单 TextField类型的usernamefield PasswordField类型的passfield 现在我有了一个数据库,其中有一个登录表,它具有以下结构 username | password ---------------------- abcd | xyz 我还创建了到数据库的连接。我可以使用ResultSet访问表数据。 我创建了一个名为conn的数据库连接对象。
username | password
----------------------
abcd | xyz
我还创建了到数据库的连接。我可以使用ResultSet访问表数据。
我创建了一个名为conn的数据库连接对象。
我知道密码是以字符数组的形式存储的。
所以,当我尝试使用以下代码匹配密码时,它不起作用
if(usernamefield.getText() == conn.username && passfield.getPassword().toString == conn.password) {
system.out.println("Correct");
}else {
system.out.println("Incorrect");
}
以上代码始终转到else块。
我还注意到passfield.getPassword()
打印正确的密码,而passfield.getPassword().toString
打印一些随机字符,如[C@76dab03c
如何解决此问题?使用
equals
而不是=
,它应该可以工作。永远不要在字符串上使用==,它几乎不会产生您期望的结果
我认为您的代码更严重的问题是,您将密码存储在纯文本中。这是一个巨大的安全风险。您应该研究密码哈希算法,例如bcrypt。您必须将字符串与.equals()进行比较,而不是==,但您还是做错了。密码应该在数据库中散列,您应该将用户输入的内容传递到数据库中,并让它使用适当的散列函数通过WHERE子句进行匹配。换句话说,请数据库使用此用户名和密码获取用户行。您应该使用.equals()来比较字符串,而不是==运算符。
getPassword()
。即使它会返回字符串,。我来自c/c++背景,对Java不熟悉,这就是为什么使用==而不是.equals。现在我已经更改了它,它工作正常。我会仔细研究哈希函数以确保密码安全。-感谢您的建议密码应该安全地哈希,而不是加密。bcrypt不是哈希算法rithm上次我看的是河豚加密这是一个加密散列函数。