Java-Compare username and password with text File
目前我正在开发一个程序,需要添加多个用户,每个用户都有自己的密码,因此所有用户名和密码都将保存在同一个文本文件中。我的问题是,是否有任何解决方案来比较用户名和密码以及它。
例如,用户A登录,用户输入用户名和密码后,将通过文本文件,在不触摸用户B或C的用户名和密码的情况下,取出用户A的用户名和密码。
最简单的方法是使用
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 } } |
号
请注意,由于一些未捕获的异常,上面的代码无法编译,但我希望您理解它是如何工作的。
你听说过不给猴子做人类的工作吗?
好吧,如果你有字段
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 } |
在文本文件中存储原始密码对您的用户来说不太安全。最好先对密码加盐—系统地将它们转换成散列,然后写入文件。然后,您不需要将密码与密码进行比较,而是将用户提供的密码与写入文件的密码进行比较。看看这里(以及其他许多地方)如何做到这一点。