如何在操作系统密钥库中存储程序密码?

F_S*_*idt 5 java keystore

我目前正在 Mac 上开发 Java 应用程序。我知道有来自 Apple 的密钥库,我想在该密钥库中安全地存储密码。

根据Apple开发人员的说法,我可以获得密钥库 keyStore = KeyStore.getInstance("KeychainStore", "Apple");

现在我的问题是:如何存储密码以及如何再次取回密码?我已经阅读了很多关于密钥库的内容,但我不知道实现会是什么样子。

以及如何从 Windows / Linux 获取内置密钥库?

Den*_*huk 6

java.security.KeyStore不是为了处理密码而创建的它是加密密钥和证书的存储设施。虽然您可以尝试使用它来存储密码,因为它可以存储私钥,但我建议您不要这样做,因为 KeyStore 的 API 很麻烦并且不是为您的用例而设计的。 https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html

如何在 Windows、Linux 或 macOS 中存储密码

您需要的是macOS 中的Keychain以及其他操作系统中的类似工具。由于您还询问有关 Windows 和 Linux 的问题,因此您可能对Java Keyring库感兴趣。它将密码存储在:

  1. macOS 上的钥匙串
  2. Windows 上的凭据管理器
  3. GNOME 上的DBus Secret Service

使用方法如下:

public static void main(String[] args) throws Exception {
    Keyring keyring = Keyring.create();
    String serviceName = "test-app";
    String accountName = "test-account";
    keyring.setPassword(serviceName, accountName, "test-password");
    String password = keyring.getPassword(serviceName, accountName);
    System.out.println(password);
}
Run Code Online (Sandbox Code Playgroud)

摇篮

implementation 'com.github.javakeyring:java-keyring:1.0.1'
Run Code Online (Sandbox Code Playgroud)

梅文

<dependency>
  <groupId>com.github.javakeyring</groupId>
  <artifactId>java-keyring</artifactId>
  <version>1.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您想支持 GNOME 以外的桌面环境,您可能必须提出自己的解决方案或搜索不同的库,但这应该可以帮助您入门。