2016-06-10 13 views
0

Private генерации ключейПроблема в создании закрытого ключа

  public PrivateKey getStoredPrivateKey(String filePath) { 
    PrivateKey privateKey = null; 
    byte[] keydata = getKeyData(filePath); 
    PKCS8EncodedKeySpec encodedPrivateKey = new PKCS8EncodedKeySpec(keydata); 
    KeyFactory keyFactory = null; 
    try { 
     keyFactory = KeyFactory.getInstance("RSA"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    try { 
     System.out.println("hello"); 
     privateKey = keyFactory.generatePrivate(encodedPrivateKey); 
    } catch (InvalidKeySpecException e) { 
     e.printStackTrace(); 
    } 
    return privateKey; 
} 

Я использую его здесь

PrivateKey privateKey = new KryptoUtil().getStoredPrivateKey(privateKeyFilePath); 

но показывает ошибку

hello 
    java.security.spec.InvalidKeySpecException:       
    java.security.InvalidKeyException: IOException : version mismatch: (supported:  00, parsed:  03 
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(Unknown Source) 

Я передаю (P12) в функции getStoredPrivateKey (String filePath).

Почему его значение дает ошибку?

+0

Вы уверены, что ваш секретный ключ имеет спецификацию PKCS # 8. Попробуйте использовать другие спецификации, такие как RSAPrivateKeySpec –

+0

, как я могу определить, что это не PKCS # 8 – Mudit

ответ

1

P12 - это тип хранилища ключей, в котором могут храниться несколько ключей и сертификатов, а также пароль для их защиты. Вы можете искать в P12 (PKCS12) в Интернете. Ваш файл является файлом P12, поэтому, скорее всего, это файл формата PKCS12.

Чтобы получить секретный ключ из файла P12, используйте код ниже. Перед вызовом этого кода вам нужно все ниже.

filePath. Строковый путь (абсолютный) файла P12.

файлPassword. Это char []. Представляет пароль файла p12.

ключPassword. Это char []. Представляет пароль для закрытого ключа. Большинство , вероятно, это то же самое, что и filePassword.

псевдоним. Строка. Представляет собой псевдоним закрытого ключа, хранящегося в P12 архива/хранилище ключей.

Чтобы проверить, что это псевдоним вашего секретного ключа вы можете использовать следующую команду

keytool -list -v -keystore <yourfile>.p12 -storetype pkcs12 

Он будет запрашивать пароль, то напечатать несколько строк. Ищите

Entry Type: PrivatKeyEntry 

Там вы найдете псевдоним.

Инициализировать эти переменные, а затем использовать нижеприведенный код для получения секретного ключа. Вы также можете связать сертификат/открытый ключ с этим ключом. Ищите API PrivateKeyEntry

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
keyStore.load(new FileInputStream(filePath), filePassword); 
PrivateKeyEntry keyEntry = (PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(keyPassword)); 
PrivateKey key = privateKeyEntry.getPrivateKey(); 

 Смежные вопросы

  • Нет связанных вопросов^_^