如何在java中安全地存储用户密码以便在整个应用程序中重复使用

问题描述 投票:0回答:1

在我的 Java 应用程序启动时,我让用户输入他的用户名和密码。这些凭据存储在 ConnectionKey 对象中,该对象在应用程序对 Web 服务进行查询时使用。每个查询都需要有效的用户名和密码。此外,这些查询在应用程序的整个生命周期中执行。

现在我将用户密码简单地存储为 ConnectionKey 中的字符串。我知道这是非常不安全的,我想通过某种加密来使其更加安全。但是,我需要能够检索原始用户密码才能查询此 Web 服务。

  • 如何安全地存储用户密码,同时在整个应用程序中仍然使用该密码?

谢谢!

编辑

ConnectionKey 只是一个类,如下所示:

class ConnectionKey {

    private final String user;
    private final String pass;
    private final String server;

    public ConnectionKey(String user, String pass, String server) {
         this.user = user;
         this.pass = pass;
         this.server = server;
    }

}
java security encryption passwords
1个回答
0
投票

首先,我确信您已阅读以下关于 SO 的问题 为什么 char[] 优于 String 作为密码? 这意味着如果您有纯密码,至少是 char[] 而不是 String

除此之外,为了安全地存储用户密码,您应该使用一种众所周知的、经过充分测试的(通常是单向的)加密算法对其进行加密。

这可能与您的要求以及如何使用 ConnectionKey 相矛盾,但问题很容易加密您的密码并更改使用密码的 api/方法。

例如,如果您尝试在服务器端验证 ConnectionKey,请更改该方法以使用加密密码,即对已知密码使用相同的加密算法,并将其与传入的加密密码进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.