Как сохранить пароль программы в хранилище ключей ОС? - PullRequest
5 голосов
/ 02 апреля 2020

Я сейчас занимаюсь разработкой приложения Java на Ма c. Я знаю, что есть хранилище ключей от Apple, и я хочу надежно хранить пароль в этом хранилище ключей.

По словам разработчиков Apple, я могу получить хранилище ключей с помощью keyStore = KeyStore.getInstance("KeychainStore", "Apple");

Теперь мой вопрос : Как я могу сохранить пароль и как я могу вернуть пароль снова? Я много читал о хранилищах ключей, но не знаю, как будет выглядеть реализация.

И как мне получить встроенное хранилище ключей из Windows / Linux?

Ответы [ 2 ]

4 голосов
/ 10 апреля 2020

java.security.KeyStore был , а не создан для работы с паролями. Это хранилище криптографических c ключей и сертификатов. Хотя вы можете попытаться использовать его для хранения паролей, поскольку он может, например, хранить личные ключи, я бы посоветовал вам этого не делать, поскольку API KeyStore громоздок и не предназначен для вашего случая использования. https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html

Как хранить пароли в Windows, Linux или macOS

Вместо этого вам понадобится Связка ключей в macOS и аналогичные инструменты в других операционных системах. Поскольку вы также спрашиваете о Windows и Linux, вас может заинтересовать библиотека Java Keyring . Он хранит пароли в:

  1. Связка ключей в macOS
  2. Диспетчер учетных данных в Windows
  3. DBus Secret Service в GNOME

Вот как его использовать:

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);
}

Gradle

implementation 'com.github.javakeyring:java-keyring:1.0.1'

Maven

<dependency>
  <groupId>com.github.javakeyring</groupId>
  <artifactId>java-keyring</artifactId>
  <version>1.0.1</version>
</dependency>

Если вы хотите поддерживать окружение рабочего стола, отличное от GNOME, вам, вероятно, придется придумать собственное решение или поискать другую библиотеку, но это должно помочь вам начать работу.

1 голос
/ 09 апреля 2020

Не думаю, что ты можешь. Keystores существуют не по той причине, что вы ищете, а по ключевой инфраструктуре publi * 1002 (я думаю, что это было упомянуто). Вы не можете хранить пароль в хранилище ключей. Вы сказали, что делаете это на Windows, верно? Я не думаю, что Windows позволяет что-то вроде того, что вы ищете. Используйте другое устройство или попробуйте использовать другой тип кода.

...