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

时间:2014-08-07 17:22:55

标签: java

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

例如,用户A登录,在用户输入用户名和密码后,它将通过文本文件并取出用户A的用户名和密码而不触及用户B或C用户B或C的用户名和密码

3 个答案:

答案 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
}