2011-10-04 148 views
1

我已經所著此代碼爲解密的字節數組與RSA算法:C#RSA解密

的RSA密鑰類:

public class RsaKeys 
    { 
     #region Properties 

     /// <summary> 
     /// The modulus N. 
     /// </summary> 
     public byte[] N 
     { get; set; } 

     /// <summary> 
     /// The public exponent E. 
     /// </summary> 
     public byte[] E 
     { get; set; } 

     /// <summary> 
     /// The private exponent E. 
     /// </summary> 
     public byte[] D 
     { get; set; } 

     #endregion 
    } 

對於解密的代碼:

public static byte[] RsaDecryptByteToByte(byte[] Byte, RsaKeys Key) // TODO: test me 
    { 
     RSACryptoServiceProvider myRsa = new RSACryptoServiceProvider(2048); 

     RSAParameters rsaParams = new RSAParameters(); 

     rsaParams.D = Key.D; 
     rsaParams.Exponent = Key.E; 
     rsaParams.Modulus = Key.N; 

     myRsa.ImportParameters(rsaParams); 

     return myRsa.Decrypt(Byte, false); // ERROR!!! 
    } 

但在最後一行(myRsa.Decrypt(Byte,false);)出現錯誤(「密鑰不存在」):(

+0

如何在應用程序中設置字節數組(您發送給方法的字節數組)? –

回答

1

那麼RSAParameters對象的所有其他字段呢?您還沒有提供更多的專用密鑰字段。

+0

是,但是RSA算法中的私鑰只有(N,D)。 –

+0

確實,在數學上只需要(N,D)。但是,某些實現需要完整的PKCS#1私鑰參數套件。我不知道微軟是否是其中之一,但你可以做一個簡單的實驗來找出答案。 –

+0

你是對的,對不起:) http://en.wikipedia.org/wiki/RSA#Using_the_Chinese_remainder_algorithm –

-3

改變你的參數「Key」=>「key」(小寫)

+1

這裏的情況與此無關;他給出的參數名稱不影響邏輯。 –