Как связать ключ XML RSA в файл PEM?
-
29-09-2019 - |
Вопрос
У меня есть два файла XML, структурированные следующим образом:
Мой ключ
<RSAKeyValue>
<Modulus> ... </Modulus>
<Exponent> ... </Exponent>
<P> ... </P>
<Q> ... </Q>
<DP> ... </DP>
<DQ> ... </DQ>
<InverseQ> ... </InverseQ>
<D> ... </D>
</RSAKeyValue>
Открытый ключ
<RSAKeyValue>
<Modulus> ... </Modulus>
<Exponent> ... </Exponent>
</RSAKeyValue>
Я использую xmlseclibs
Библиотека Роберта Ричардса, которая требует представления ключа .pem для шифрования и расшифровки вещей.
Как новичок в шифровании, я не уверен, с чего начать, и курсорный поиск Google не раскрыл ничего особенного ...
Спасибо!
Решение
Я нашел Java утилита это может это сделать.
Другие советы
Для тех, кто хочет, чтобы полученный PEM будет читаемой Bouncycastle.:
- использовать Xmlsec2pem. инструмент для получения файла PEM
- Преобразовать PEM в PKCS8 и обратно (!)
Окончательное решение, с которым я доволен:
java XMLSec2PEM my.xml > my.pem
- редактировать
my.pem
вручную org.bouncycastle.openssl.PEMReader.readObject()
возвратnull
:-(openssl pkcs8 -topk8 -inform pem -in my.pem -outform pem -nocrypt -out my.pkcs8
openssl pkcs8 -inform pem -nocrypt -in my.pkcs8 -out my.pkcs8.pem
- Теперь
my.pkcs8.pem
читается сPEMReader
Я искал часами на одну и ту же проблему. Этот инструмент Java сделал работу :)
Но ссылка изменилась, теперь она доступна в здесь
Нашел этот полезный онлайн-инструмент Конвертер ключей RSA, который поддерживает
- Xml -> pem
- PEM -> XML
Поскольку XMLSeclibs является PHP, кажется, что еще одно решение PHP может быть желательно. Вот как:
<?php
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
$rsa->loadKey('<RSAKeyValue>
<Modulus> ... </Modulus>
<Exponent> ... </Exponent>
<P> ... </P>
<Q> ... </Q>
<DP> ... </DP>
<DQ> ... </DQ>
<InverseQ> ... </InverseQ>
<D> ... </D>
</RSAKeyValue>');
$privatekey = $rsa->getPrivateKey();
$publickey = $rsa->getPublicKey();
?>
PHPSECLIB встроил в поддержку ключей XML, ключи для замазки и клавиш PKCS1. Он автоматически обнаруживает формат и загрузить его, и GetPrivateKey / GetPublickey выводят ключи от форматы PKCS1 по умолчанию, если параметры не предоставляются. Больше информации: