Хранение ключа с помощью Keystore - PullRequest
0 голосов
/ 07 февраля 2012

Я использую хранилище ключей для защиты закрытого ключа в файле (с паролем для этого файла). Я не понял этот код

// save my secret key
javax.crypto.SecretKey mySecretKey;
KeyStore.SecretKeyEntry skEntry =
    new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry("secretKeyAlias", skEntry, 
    new KeyStore.PasswordProtection(password));

// store away the keystore
java.io.FileOutputStream fos = null;
try {
    fos = new java.io.FileOutputStream("newKeyStoreName");
    ks.store(fos, password);
} finally {
    if (fos != null) {
        fos.close();
    }
}

Что делает setEntry ?? Сохраняем ли мы закрытый ключ через fileoutputstream? Если это правда, где пароль для файла ??? Что такое расширение файла ??. Это .jks ??

1 Ответ

6 голосов
/ 07 февраля 2012

Хранилище ключей Java - это контейнер для криптографических объектов. Он может содержать симметричные ключи, закрытые ключи и сертификаты. Метод setEntry() добавляет еще одну запись в хранилище ключей. В вашем случае он добавляет симметричный ключ, идентифицируемый «secretKeyAlias» с защищенным паролем, в хранилище ключей. Если вы хотите сохранить закрытый ключ, вы должны создать вместо него KeyStore.PrivateKeyEntry.

После того, как вы создали хранилище ключей в памяти, вы можете сохранить его на диске. Хранилище ключей имеет store() -метод , который записывает хранилище ключей в Stream. В этом случае FileOutputStream. В хранилище ключей также добавляется MAC , защищенный паролем. В вашем случае пароль такой же, как и выше, но это не обязательно.

Обычным расширением для хранилища ключей Java является .jks, но ваш код просто сохраняет его в файле с именем "newKeyStoreName".

...