2015-10-21 4 views
0

Я пытаюсь запустить расшифровку RSA с помощью C#.C# - RSACryptoServiceProvider - Ошибка: Плохие данные

Мой код:

byte[] n = BigInteger.Parse("3104649130901425335933838103517383").ToByteArray(); 
byte[] p = BigInteger.Parse("49662237675630289").ToByteArray(); 
byte[] q = BigInteger.Parse("62515288803124247").ToByteArray(); 
byte[] e = BigInteger.Parse("65537").ToByteArray(); 
byte[] d = BigInteger.Parse("1427000713644866747260499795119265").ToByteArray(); 
byte[] dp = BigInteger.Parse("15085765714732865").ToByteArray(); 
byte[] dq = BigInteger.Parse("1326865232237451").ToByteArray(); 
byte[] iq = BigInteger.Parse("5777070651124236").ToByteArray(); 

RSAParameters rsaparams = new RSAParameters(); 
rsaparams.P = p; 
rsaparams.Q = q; 
rsaparams.Modulus = n; 
rsaparams.Exponent = e; 
rsaparams.D = d; 
rsaparams.DP = dp; 
rsaparams.DQ = dq; 
rsaparams.InverseQ = iq; 

RSACryptoServiceProvider csp = new RSACryptoServiceProvider(); 
csp.ImportParameters(rsaparams); 

Когда я бегу, я получаю эту ошибку:

enter image description here

Может кто-нибудь сказать мне, что я делаю неправильно?

ответ

0

Очевидно, RSAParameters ожидает, что его компонентный байт [] будет иметь формат в формате big-endian. Таким образом, вы должны поменять байты в каждом из ваших байт-массивов, полученных с BigInteger.ToByteArray(). Пример обратного метода на месте:

public static void reverse (ref byte[] x) 
    { 
     int i = 0; 
     int j = x.Length - 1; 
     while (i < j) 
     { 
      byte t = x [i]; 
      x [i] = x [j]; 
      x [j] = t; 
      i++; 
      j--; 
     } 
    } 
+0

Благодарим за ответ. К сожалению, это не решение. Исключение все еще бросается. – player

+0

@player: Он работает для меня. –

Смежные вопросы