Преобразование формата открытого ключа RSA (1024 бит) в открытый ключ DER ASN.1 для Java - PullRequest
0 голосов
/ 25 мая 2018

Вот мой код для генерации ключа RSA

public static void generateRsaKeyPair() {
  try {
      KeyPairGenerator keyPairGene = KeyPairGenerator.getInstance("RSA");
      keyPairGene.initialize(512);
      KeyPair keyPair = keyPairGene.genKeyPair();
      serverPublicKey = (RSAPublicKey) keyPair.getPublic();
      serverPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
  } catch (Exception e) {
   e.printStackTrace();
  } finally{
  }
 }

Теперь я хочу преобразовать закодированные байты DER / ASN.1, а также узнать, какой кодированный формат используется по умолчанию при генерации ключа RSA с использованием Java JCE API.

1 Ответ

0 голосов
/ 26 мая 2018

Пара ключей RSA, созданная с использованием поставщика SunRsaSign, состоит из внутреннего представления, в основном состоящего из значений BigInteger.RSA - это алгоритм, который использует целочисленный алгоритм в конце концов.Внутренне это вряд ли будет закодировано в ASN.1, поскольку алгоритм не может быть выполнен с использованием двоичного кода.Вы можете использовать свой отладчик для просмотра внутренних полей, но обратите внимание, что внутренняя структура деталь реализации , и на нее не следует полагаться.

Для преобразования открытого ключа в ASN.1вам просто нужно вызвать serverPublicKey.getEncoded(), и вы получите структуру SubjectPublicKeyInfo, которая является структурой данных ASN.1, определенной для сертификатов X.509, закодированной с использованием схемы двоичного кодирования BER (DER - это подмножество BER, обычно кодировкаDER совместим).Он состоит из последовательности, содержащей OID - указывающий тип ключа RSA - и открытый ключ, закодированный в PKCS # 1.Вы можете найти детали в здесь , здесь и, конечно, структуре RSAPublicKey в здесь .

Вы также можете позвонить serverPrivateKey.getEncoded(), чтобы получитьнезащищенная внутренняя структура PKCS # 8.Тем не менее, это очень сомнительно, если вы должны это сделать.Вы не должны распространять незащищенные закрытые ключи.Если вам нужно сохранить его, используйте вместо этого хорошо защищенное хранилище ключей PKCS # 12.

...