Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将java中的密码字段与oracle数据库匹配_Java_Database_Passwords_String Matching - Fatal编程技术网

无法将java中的密码字段与oracle数据库匹配

无法将java中的密码字段与oracle数据库匹配,java,database,passwords,string-matching,Java,Database,Passwords,String Matching,我正在尝试使用Java中的Swing构建一个简单的登录表单。我创建了一个带有两个字段的示例表单 TextField类型的usernamefield PasswordField类型的passfield 现在我有了一个数据库,其中有一个登录表,它具有以下结构 username | password ---------------------- abcd | xyz 我还创建了到数据库的连接。我可以使用ResultSet访问表数据。 我创建了一个名为conn的数据库连接对象。

我正在尝试使用Java中的Swing构建一个简单的登录表单。我创建了一个带有两个字段的示例表单

  • TextField类型的usernamefield
  • PasswordField类型的passfield
  • 现在我有了一个数据库,其中有一个登录表,它具有以下结构

    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上次我看的是河豚加密这是一个加密散列函数。