2017-01-08 6 views
1

Я пытаюсь расшифровать текст, который зашифрован с RSA, у меня есть открытый ключ, чтобы сделать этоИнициализация RSA из строки

`

-----BEGIN RSA PUBLIC KEY----- 
MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA 
mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+ 
+gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO 
sYU+aRX4RmoF 
-----END RSA PUBLIC KEY----- 

`

Как я могу загрузить этот в RSACryptoServiceProvider, потому что это может загружаться только из XMLString, и я не знаю, как его преобразовать в формат Xml.

Размер ключа 128

Я пытался инициализировать его, используя следующий код

public byte[] Decrypt128(byte[] input) 
{ 
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(128); 
    rsa.ImportCspBlob(Encoding.ASCII.GetBytes(_longKey)); 
    return rsa.Decrypt(input, true); 
} 

_longKey является содержание между Начинайте и заканчивайте, а также включая начальные и конечные, бот Bad Version of provider.

Это не дублирует вопрос How do you convert Byte Array to Hexadecimal String, and vice versa?

Я уже знаю, как преобразовать байты в hex и hex в байт, но это никак не помогает мне инициализировать RSACryptoServiceProvider, возможно, дайте мне пример, как это поможет, но на данный момент это не

+0

Возможный дубликат [? Как преобразовать массив байтов в шестнадцатеричной строки, и наоборот] (HTTP: // StackOverflow. ком/вопросы/311165/как-делать-вы-ко ert-byte-array-to-hexadecimal-string-and-vice versa) –

+0

Я не уверен, как это возможно, если мне нужно инициализировать 'RSACryptoServiceProvider' с помощью открытого ключа –

+0

. Содержимое между BEGIN и END вероятнее всего шестнадцатеричную строку или, что еще более вероятно, [Base64] (http://stackoverflow.com/questions/7134837/how-do-decode-a-base64-encoded-string). Поэтому Encoding.GetBytes не будет работать. –

ответ

2

Вы можете использовать BouncyCastle который имеет PemReader позволяет извлечь модуль и экспоненту для ключа:

using (var reader = File.OpenText("mykey.key")) 
{ 
    var pem = new PemReader(reader); 
    var o = (RsaKeyParameters)pem.ReadObject(); 
    using (var rsa = new RSACryptoServiceProvider()) 
    { 
     var parameters = new RSAParameters(); 
     parameters.Modulus = o.Modulus.ToByteArray(); 
     parameters.Exponent = o.Exponent.ToByteArray(); 
     rsa.ImportParameters(parameters); 

     // Do what you need to do with the RSACryptoServiceProvider instance 
    } 
} 

Если вы не хотите, чтобы иметь зависимость от BouncyCastle в проекте, после загрузки открытый ключ в RSACryptoServiceProvider с помощью этого метода вы можете экспортировать его в XML для дальнейшего использования:

string xml = rsa.ToXmlString(false); 
File.WriteAllText("mykey.xml", xml); 
+0

Я думаю, что это может сработать, я обновил свой вопрос с помощью открытого ключа, я думаю, что он может быть сломан или что-то он загружается отлично, но ImportParameters дает «Плохие данные» –

+0

Я не вижу фактического открытого ключа, который вызывает Bad Data в вашем вопрос. –

+0

Просто добавил, что ему пришлось переформатировать его –