目前我正在开发一个需要添加多个用户的程序,每个用户都有自己的密码,因此所有用户名和密码都将保存在同一个文本文件中。我的问题是,有没有任何解决方案只是比较用户名和密码和它。
例如,用户A登录,在用户输入用户名和密码后,它将通过文本文件并取出用户A的用户名和密码而不触及用户B或C用户B或C的用户名和密码
答案 0 :(得分:1)
最简单的方法是使用Properties
。 Java-Properties-File看起来像这样:
# this is a comment
name=value
user=password
我建议不要将密码作为纯文本存储在您的文件中。保存它的哈希足以比较密码:
public class YourPasswordStorage
{
Properties users = new Properties();
public YourPasswordStorage (File file)
{
user.load(file);
}
void insertUser (String user, String password)
{
users.put(user,
Base64.getEncoder().encodeToString(
MessageDigest.getInstance("sha-512").digest(password)));
}
boolean checkUser (String user, String password)
{
String hash = Base64.getEncoder().encodeToString(
MessageDigest.getInstance("sha-512").digest(password));
return (hash.equals(users.get(user)); // note that users.get(user) could be null
}
}
请注意,由于某些未被捕获的异常,上面的代码将无法编译,但我希望您了解它是如何工作的。
答案 1 :(得分:0)
将原始密码存储在文本文件中对您的用户来说并不安全。首先加密密码要好得多 - 系统地将它们转换为写入文件的哈希值。然后,不是将密码与密码进行比较,而是将用户提供给您的密码取为盐,并将其与写入文件的密码进行比较。看看here(以及许多其他地方)如何做到这一点。
答案 2 :(得分:0)
你有没有听过从来没有让猴子做人工
AFAICS你将拥有字段username password and user
,那么为什么不使用database
而不是文件。
利用H2 database
允许您将数据存储为文件。
只需添加driver jar
并编写此简单代码
Connection con = null;
try{
Class.forName("org.h2.Driver");
con = DriverManager.getConnection("jdbc:h2:./mydb;MODE=MySQL;", "", "");
PreparedStatement stmt= con.prepareStatement
("INSERT INTO yourTable(user,username,password) VALUES(?,?,?)");
stmt.setString(1, "someUser");
stmt.setString(2, "someUsername");
stmt.setString(3, "somePassword");
stmt.executeUpdate();
}
catch (SQLException e) {
e.printStackTrace();
}
finally{
//close statements
}