2015-10-21 27 views
0

我試圖用C#運行RSA解密。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預計其組件byte []數組是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:它適合我。 –