Как сохранить и получить собственный ключ screct в хранилище ключей Java 8 PKCS12 - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь сохранить свой собственный секретный ключ в хранилище ключей PKCS12.Я попытался, используя приведенный ниже код:

char[] passArray = "password".toCharArray();// this is key store pass

String key  = "test123"; // this is my own secret key

// Loading a Keystore
KeyStore p12KeyStore = KeyStore.getInstance("PKCS12");
p12KeyStore.load(new FileInputStream("testKeyStore.p12"), passArray);

Сохранение моего собственного секретного ключа, как показано ниже:

byte [] byteKey = key.getBytes();

SecretKeySpec keySpec = new SecretKeySpec(byteKey, "DSA");

KeyStore.SecretKeyEntry secret = new KeyStore.SecretKeyEntry(keySpec);

KeyStore.ProtectionParameter password = new KeyStore.PasswordProtection(passArray);

p12KeyStore.setEntry("secret-key", secret, password);

, но я не уверен, является ли хранение моего собственного секретного ключа наилучшим образом.практиковать или нет.а также при попытке получить свой собственный ключ из хранилища ключей, поскольку он не похож на мой оригинальный секретный ключ.

Key eKey = p12KeyStore.getKey("secret-key", passArray);

Может ли кто-нибудь помочь мне в этом, чтобы сохранить и получить свой собственный секрет в хранилище ключей PKCS12?

1 Ответ

0 голосов
/ 25 марта 2019

Вы уверены, что код, который вы выше работали?Потому что DSA является асимметричным алгоритмом, а не симметричным алгоритмом.Если вы уверены, что это секретный ключ, он должен быть AES или DES или DESede (Triple DES).Ваш приведенный выше код должен был потерпеть неудачу.

И ответы на ваши вопросы:

  • Так же, как базы данных хранят данные, ключи (секретные ключи и пары ключей) и сертификаты предназначены для хранения вхранилище ключей, вот где они должны находиться в вашем приложении.Вы должны ссылаться на них / получать их из хранилища ключей.
  • И из того, что вы сказали в одном из утверждений, что ключ отличается от того, что вы имели изначально, когда хранили и затем извлекали, судя по этому, ядумаю, что ключ у вас есть Triple DES или DES ключ.DES / TripleDES использует биты четности, а биты четности корректируются Java API SecretKeySpec.Это приводит к тому, что ключ выглядит не так, как оригинал, но на самом деле он такой же.Вы можете прочитать больше о битах четности здесь .

И в качестве лучшей практики не следует хранить секретные ключи в PKCS12 хранилище ключей.Интернет-стандарт определяет, что хранилище ключей PKCS12 должно содержать только одну запись KeyPair, связанную с его цепочкой сертификатов.Несмотря на то, что он может содержать более одной записи, идеально иметь только одну запись с key password, аналогичным keystore password.Они также могут хранить секретные ключи, но лучше всего хранить их в формате JCEKS хранилища ключей.

...