samodum
@samodum

Как экспортировать RSA private key из Java в виде XML?

Привет всем!
Выручайте, уже замучался. В гугле меня забанили - не найду никак ответа.
В общем, вопрос такой. В Java (Android) я генерирую пару приватный-публичный ключи. В Андроиде всё проходит отлично - шифрует и дешифрует строки как надо. Но теперь мне надо экспортировать эту пару в .NET (C#). Публичный экспортируется как надо в виде
<RSAKeyValue><Modulus>AKfPOw...OZASeVM0qkuWp3</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

Но вот с экспортом приватного ключа проблемы. RSAPrivateKeySpec даёт возможность получить только модуль и приватную экспоненту. Но для .NET нужны ещё параметры P, Q, DP, DQ, InverseQ (D - это приватная экспонента). Откуда их взять? Вычислять по формулам из википедии? Но ведь должно быть уже готовое решение. Только вот найти его никак не могу. Помогите.
Код:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.genKeyPair();
PublicKey publicKey = kp.getPublic();
PrivateKey privateKey = kp.getPrivate();

String xmlPublic = getPublicKeyAsXml(publicKey);
String xmlPrivate = getPrivateKeyAsXml(privateKey);

public String getPrivateKeyAsXml(PrivateKey privateKey) throws Exception {
	KeyFactory kf = KeyFactory.getInstance("RSA");
	RSAPrivateKeySpec ks = kf.getKeySpec(privateKey, RSAPrivateKeySpec.class);
	BigInteger modulus = ks.getModulus();
	BigInteger exponent = ks.getPrivateExponent();

	byte[] modByte = modulus.toByteArray();
	byte[] expByte = exponent.toByteArray();

	String encodedModulus = Base64.encodeToString(modByte, Base64.NO_WRAP);
	String encodedExponent = Base64.encodeToString(expByte, Base64.NO_WRAP);

	String publicKeyAsXML = "<RSAKeyValue>" +
			"<Modulus>" + encodedModulus + "</Modulus>" +
			"<Exponent>AQAB</Exponent>" +
			"<P></P>" +
			"<Q></Q>" +
			"<DP></DP>" +
			"<DQ></DQ>" +
			"<InverseQ></InverseQ>" +
			"<D>" + encodedExponent + "</D>" +
			"</RSAKeyValue>";

	Log.d(TAG, "getPrivateKeyAsXml: " + publicKeyAsXML);
	return publicKeyAsXML;
}
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 1
@SZolotov
разрабатываю на Xamarin,WPF,Qt, Asp.net
Если на стороне java можно сделать ключ в виде pem, передавайте в таком виде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
BTlabs Москва
от 60 000 руб.
UNIQ systems Казань
от 90 000 руб.
Frogogo Москва
от 100 000 руб.
16 янв. 2019, в 10:30
5000 руб./за проект
16 янв. 2019, в 10:29
1000 руб./за проект
16 янв. 2019, в 09:06
500 руб./в час