0

什么是存储登录信息的安全方式?我有一个 Swing 应用程序,要求用户登录到一个在线帐户,目前正在登录作品,但如果可能的话,我希望能够将用户登录信息存储在他们的计算机上。我想到了几种方法来做到这一点:

  1. 将登录信息保存在文件中
  2. 将登录信息保存在数据库中

做这个的最好方式是什么?Java是否有内置的东西来做到这一点?

4

4 回答 4

2

如果您确实将登录信息存储到用户的计算机上,.. 除了 Daniel Kaplan 提到的之外,一种老式的方法是将其存储在 cookie 中。

另一种方法是存储到Web SQL中,尽管它以 Javascript(HTML5) 为中心并且对它的客户端支持仍然很暗淡。

编辑——因为它是一个摇摆应用程序

另一种更安全的方法是使用 MD5 加密密码将其存储在SQLite中

如果您并不真正关心安全性,请将其存储到 XML 文件或配置文件甚至 CSV 文件中。

于 2013-01-21T18:13:59.653 回答
1

由于您的应用程序正在运行,您可以将登录信息保存在一个文件中,但以加密形式。使用数据库没有意义,因为您不想在将部署应用程序的位置安装数据库。

如果您的应用程序已经从用户计算机上的数据库中访问数据,则首选将用户的凭据保存在数据库中,而不是将其保存在文件中。

于 2013-01-21T18:20:56.097 回答
0

如果您的意思是用户名信息 - 将其存储在数据库中没有问题。

如果您的意思是密码,通常它不会在任何地方以纯格式存储。

存储的是它的哈希值(被认为不可能返回密码),由一些(更好 - 旧证明)算法生成。

当有人尝试登录时,系统会获取输入的密码,将其转换为哈希(使用相同的算法)并与数据库中的内容(或其他地方)进行比较。

于 2013-01-21T18:19:50.623 回答
0

我决定使用 Preferences API 来存储和检索数据
http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html

这是最终代码的粗略示例:

public class Login extends javax.swing.JDialog{
    // Get saved info and set the textbox text
    public Login(){
        String userName = pref.get("user", "");
        if(!userName.equals("")){
            this.user.setText(userName);
        }
        String passName = pref.get("pass", "");
        if(!passName.equals("")){
            this.pass.setText(passName);
        }
    }

    // Run on login button click
    public void login(){
        String p = new String(pass.getPassword());
        DoLogin log = new DoLogin(user.getText(), p);
        log.execute();
    }

    // Process in background
    public class DoLogin extends SwingWorker{
        public void done(){
            // On successfull login save user data
            pref.put("user", this.strUser);
            pref.put("pass", this.strPass);
        }

        public String doInBackground(){
            // Process login
        }
    }
}
于 2013-01-24T15:56:49.700 回答