Создание PrivateKey из массива byte

Есть ли способ генерировать PrivateKey из массива байтов? Я получил этот массив байтов, используя метод getEncoded (), но теперь мне нужно преобразовать его в PrivateKey.

Благодарю, Vuk

Я тоже искал этот ответ и, наконец, нашел его. keyBytes – массив байтов, первоначально созданный с помощью getEncoded ().

//add BouncyCastle as a provider if you want Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); //create a keyfactory - use whichever algorithm and provider KeyFactory kf = KeyFactory.getInstance("DSA", "BC"); //for private keys use PKCS8EncodedKeySpec; for public keys use X509EncodedKeySpec PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(keyBytes); PrivateKey pk = kf.generatePrivate(ks); 

Я никогда ничего не делал для JavaCard, но из этого поста , похоже, вы можете использовать class KeyFactory. Вам, вероятно, потребуется загрузить библиотеку BouncyCastle.

Как указано в документах Java

Ключи обычно получают с помощью генераторов ключей, сертификатов или различных classов идентификации, используемых для управления ключами. Ключи также могут быть получены из ключевых спецификаций (прозрачных представлений основного материала ключа) с использованием фабрики ключей.

Класс KeyFactory может помочь вам в этом.

Выбросьте закодированный массив байтов. На JavaCard AFAIR не имеет возможности его декодировать напрямую – вам нужно установить разные ключевые компоненты отдельно.

Например, RSAPrivateKey необходимо инициализировать с показателем и модулем:

 rsaPrivate = (RSAPrivateKey) javacard.security.KeyBuilder.buildKey (javacard.security.KeyBuilder.TYPE_RSA_PRIVATE, javacard.security.KeyBuilder.LENGTH_RSA_512, false); byte[] exponent = {(byte) 7}; byte[] modulus = {(byte) 33}; rsaPrivate.setExponent(exponent, (short) 0, (short) exponent.length); rsaPrivate.setModulus(modulus, (short) 0, (short) modulus.length); 

BTW: Для вопросов JavaCard я рекомендую форум JavaCard на форумах Oracle. Если вы ищете для RSAPrivateKey, вы найдете интересные сообщения.

Либо вы должны самостоятельно декодировать закодированный blob PKCS # 8 (parsing ASN.1 BER), либо установить компоненты, либо вы можете получить компоненты из закрытого ключа (по крайней мере, частного экспонента и модуля) в качестве Java BigIntegers, преобразовать их в беззнаковые байтовые массивы и установить их в API Java Card, как объяснил Роберт. Разбор PKCS # 8 может быть выполнен на Java-карте, но это довольно ужасающее упражнение.