Java-比较文本文件的用户名和密码

Java-Compare username and password with text File

目前我正在开发一个程序,需要添加多个用户,每个用户都有自己的密码,因此所有用户名和密码都将保存在同一个文本文件中。我的问题是,是否有任何解决方案来比较用户名和密码以及它。

例如,用户A登录,用户输入用户名和密码后,将通过文本文件,在不触摸用户B或C的用户名和密码的情况下,取出用户A的用户名和密码。


最简单的方法是使用Properties。Java属性文件是这样的:

1
2
3
# this is a comment
name=value
user=password

我建议不要将密码以纯文本形式存储在您的文件中。保存它的哈希值将足以比较密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
    }
}

请注意,由于一些未捕获的异常,上面的代码无法编译,但我希望您理解它是如何工作的。


你听说过不给猴子做人类的工作吗?

好吧,如果你有字段username password and user,那么为什么不使用database而不是文件呢?利用H2 database可以将数据存储为文件。只需包含driver jar并编写这个简单的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
}


在文本文件中存储原始密码对您的用户来说不太安全。最好先对密码加盐—系统地将它们转换成散列,然后写入文件。然后,您不需要将密码与密码进行比较,而是将用户提供的密码与写入文件的密码进行比较。看看这里(以及其他许多地方)如何做到这一点。