RSA - экспортировать открытый ключ на другой язык - PullRequest
1 голос
/ 16 ноября 2010

Я использую C # для генерации открытого / закрытого ключа RSA для шифрования информации пользователя. Мне нужно сделать открытый ключ и экспонент доступными для других систем и языков. Они будут подписывать данные, а веб-служба C # расшифровывает их и обрабатывает.

Прямо сейчас у меня есть

RSA rsa = new RSACryptoServiceProvider(2048); // Generate a new 2048 bit RSA key RSAParameters par = rsa.ExportParameters(false);

Но результаты для par.Exponent и par.Modulo являются байтовыми массивами. Как я могу преобразовать показатель степени в строку, которая может быть проанализирована на другом языке. Примеры на других языках, которые я видел, кажутся b

Ответы [ 3 ]

2 голосов
/ 16 ноября 2010

Вы можете использовать обычную шестнадцатеричную строку или кодировку Base64 - оба являются хорошо известными методами передачи двоичных данных в виде строки:

byte[] byteArray = new byte[] { 1, 2, 3, 253, 254, 255 };

// hexString will be "010203FDFEFF"
string hexString = string.Concat(byteArray.Select(b => b.ToString("X2")));

// b64String will be "AQID/f7/"
string b64String = Convert.ToBase64String(byteArray);

(Обратите внимание, что если вы не используете .NET4, вам нужно будет передать массив методу Concat, а не IEnumerable<T>. Вы можете сделать это достаточно легко, прикрепив вызов ToArray к Select.)

0 голосов
/ 16 ноября 2010

Преобразовать в гекс:

Convert.ToString(Convert.ToInt32(theByteArray, 2), 16);
0 голосов
/ 16 ноября 2010

rsa.ToXmlString экспортирует ваш ключ в виде XML-файла.

В противном случае возьмите байтовый массив и используйте метод Convert.ToBase64String

Это даст вам base64 представление ключевых параметров, которые должны быть в состоянии использоваться любым языком.

Вы также можете найти библиотеку OpenSSLKey полезной для использования ключей RSA между языками. http://www.jensign.com/opensslkey/

...