在我的 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;
}
}
首先,我确信您已阅读以下关于 SO 的问题 为什么 char[] 优于 String 作为密码? 这意味着如果您有纯密码,至少是 char[] 而不是 String
除此之外,为了安全地存储用户密码,您应该使用一种众所周知的、经过充分测试的(通常是单向的)加密算法对其进行加密。
这可能与您的要求以及如何使用 ConnectionKey 相矛盾,但问题很容易加密您的密码并更改使用密码的 api/方法。
例如,如果您尝试在服务器端验证 ConnectionKey,请更改该方法以使用加密密码,即对已知密码使用相同的加密算法,并将其与传入的加密密码进行比较。