Java 从文件中读取密码以进行身份验证
我在匹配输入的用户密码和用户的实际密码(如果用户存在)时遇到问题。实际密码作为字符数组存储在文件中。我尝试将数组打印为字符串,但输出与字符数组表示形式相同 以下代码段从文件中读取密码,并将其与用户输入的密码进行比较,以确定用户是否应登录到客户端。文件按以下方式存储数据-“用户”、“密码”、“地址” 文件中的日期示例: radi1006[C@4f1c987b,夏尔郡,SO1Java 从文件中读取密码以进行身份验证,java,passwords,Java,Passwords,我在匹配输入的用户密码和用户的实际密码(如果用户存在)时遇到问题。实际密码作为字符数组存储在文件中。我尝试将数组打印为字符串,但输出与字符数组表示形式相同 以下代码段从文件中读取密码,并将其与用户输入的密码进行比较,以确定用户是否应登录到客户端。文件按以下方式存储数据-“用户”、“密码”、“地址” 文件中的日期示例: radi1006[C@4f1c987b,夏尔郡,SO1 public void checkCredentials(String username, char[] passw
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.";
}
}
文件中的日期示例:
radi1006[C@4f1c987b,郡,SO1
您的问题似乎不是读取和比较值,而是您没有在文件中正确存储密码
[C@4f1c987b
是在char[]
上调用.toString()
时得到的
(如果有人提供[C@4f1c987b
作为密码,您的代码将传递它)
当您从密码字段获取char[]
并希望将其写入文本文件时,需要将其转换为字符串。本质上:
final String s = new String(password, StandardCharsets.UTF_8);
(这假设我们不太关心安全性,因为JPasswordField
不返回字符串的原因是该字符串不会以明文形式挂在堆上。请阅读。)
文件中的日期示例:
radi1006[C@4f1c987b,郡,SO1
您的问题似乎不是读取和比较值,而是您没有在文件中正确存储密码
[C@4f1c987b
是在char[]
上调用.toString()
时得到的
(如果有人提供[C@4f1c987b
作为密码,您的代码将传递它)
当您从密码字段获取char[]
并希望将其写入文本文件时,需要将其转换为字符串。本质上:
final String s = new String(password, StandardCharsets.UTF_8);
(这假设我们不太关心安全性,因为
JPasswordField
不返回字符串的原因是该字符串不会以明文形式挂在堆上。请阅读。)密码变量的数据类型是什么?逻辑中缺少的是密码的任何加密。将密码以明文形式存储在文件中是危险的,如果这样做,您可能需要重新考虑您的方法。@GregKopff我正在从返回字符arr的JPAssword字段传递值唉。@TimBiegeleise我知道,但这只是一门编程课程。如果[C@4f1c987b
确实在文件中,那么看起来您没有正确地将密码写入文件。[C@4f1c987b
是在char[]上调用.toString()
时得到的
value。您的password
变量的数据类型是什么?您的逻辑中缺少的是对密码的任何加密。将密码以明文形式存储在文件中是危险的,如果这样做,您可能需要重新考虑您的方法。@GregKopff我正在从返回cha的JPasswordField传递值Racker数组。@TimBiegeleise我知道,但这只是一个编程课程。如果[C@4f1c987b
确实在文件中,那么看起来您没有正确地将密码写入文件。[C@4f1c987b
是在char[]上调用.toString()
时得到的
value。谢谢,这解释了一切。谢谢,这解释了一切。