从文件中读取密码以进行身份​​验证Java

时间:2017-05-11 09:14:40

标签: java passwords

我无法匹配为用户密码输入的输入和用户的实际密码(如果用户存在)。实际密码作为字符数组存储在文件中。我尝试将数组打印为字符串,但输出与字符数组表示相同。

以下代码段从文件中读取密码,并将其与用户输入的密码进行比较,以确定用户是否应登录到客户端。该文件以下列方式存储数据 - “user”,“password”,“address”。

文件中的日期示例:

radi1006,[C @ 4f1c987b,The Shire,SO1

    public void checkCredentials(String username, char[] password)
    {

        if(fileExists("users" + File.separator + username + ".txt"))
        {
            FileReader fileR;
            BufferedReader buffR = null;

            try
            {

                fileR = new FileReader("users" + File.separator + username + ".txt");
                buffR = new BufferedReader(fileR);

                String[] info = buffR.readLine().split(", ");    

                if(Arrays.equals(password,info[1].toCharArray()))
                {
                    loginResponse = "success";
                    client = new ClientApplication();
                    client.init();
                }
                else
                {
                    loginResponse = "Wrong username or password.";
                    return;
                }
            }    
            catch (Exception e)
            {

            }
            finally
            {
                try
                {
                    buffR.close();
                }
                catch (IOException e)
                {

                }
            }
        }
        else
        {
            loginResponse = "There is no such user.";
        }
}

1 个答案:

答案 0 :(得分:0)

  

文件中的日期示例:

     

radi1006, [C@4f1c987b, The Shire, SO1

看起来您的问题不在于阅读并比较这些值。相反,您没有正确地将密码存储在文件中。

[C@4f1c987b是您在.toString()上致电char[]时获得的。

(如果有人提供[C@4f1c987b作为密码,您的代码会通过它。)

当您从密码字段中获取char[]并希望将其写入文本文件时,需要将其转换为字符串。基本上:

final String s = new String(password, StandardCharsets.UTF_8);

(这假设我们并不过分关注安全性,因为JPasswordField没有返回String的原因是String不会在堆中挂起明确。阅读here。)