Java 如何将char[]数组(输入)与文件中的文本进行比较?

Java 如何将char[]数组(输入)与文件中的文本进行比较?,java,Java,例如,我有这段代码,我想知道我这样做是否正确(将输入密码存储在char数组中)。现在真正的问题是如何将这个char[]密码与文本文件中的用户名和密码进行比较?不将其转换为字符串。之所以console.readPassword()返回char[]而不是string是因为字符串在Java中是不可变的,密码将驻留在应用程序的堆内存中,直到它最终被垃圾回收为止。同时,如果潜在的攻击者访问您的内存,他/她将以明文形式获取您的密码 当密码未转换为字符串时,在使用完密码后,可以通过覆盖char[]立即将其从内

例如,我有这段代码,我想知道我这样做是否正确(将输入密码存储在char数组中)。现在真正的问题是如何将这个char[]密码与文本文件中的用户名和密码进行比较?不将其转换为字符串。

之所以
console.readPassword()
返回
char[]
而不是
string
是因为字符串在Java中是不可变的,密码将驻留在应用程序的堆内存中,直到它最终被垃圾回收为止。同时,如果潜在的攻击者访问您的内存,他/她将以明文形式获取您的密码

当密码未转换为字符串时,在使用完密码后,可以通过覆盖
char[]
立即将其从内存中清除。有关详细信息,请参阅:

关于您的代码,如果您也能够从文件中以
char[]
的形式获取密码,则可以通过
Arrays.equals(…)
方法比较密码。请参见下面的示例代码:

Console-Console=System.Console();
扫描仪=新的扫描仪(System.in);
系统输出打印(“输入用户名:”);
字符串user=scanner.nextLine();
系统输出打印(“输入密码:”);
char[]password=console.readPassword();
字符串userInTextFile=“user”//来自文件
char[]passwordInTextFile=new char[]{'p','a','s','s','w','o','r','d'};//来自文件
if(Objects.equals(user,userInTextFile)和&array.equals(passwordInTextFile,password)){
System.out.println(“用户名和密码正确!”);
}否则{
System.out.println(“无效凭证!”);
}
Arrays.fill(密码“0”);//清除内存中的密码
Arrays.fill(passwordInTextFile,'0');//从内存中清除passwordInTextFile

重要提示:实际上,您根本不应该比较明文密码。您应该使用现代密码散列函数(如Bcrypt、Scrypt、PBKDF2等)验证用户提交的密码与数据库中的散列+盐析密码。

到目前为止您尝试了什么?什么地方让你不舒服?
System.out.print("Enter username: ");
String user = scanner.nextLine();
System.out.print("Enter password: ");
char[] password = console.readPassword();