2016-05-20 13 views
0

RSAを使用してC#で文字列を暗号化しています。同じスタブがPythonで動作しますが、C#で暗号化するときに、「メッセージが大きすぎます」と解読するときに問題が発生します。値のC#でRSA暗号化を行い、openSSLで復号化するとメッセージが長すぎます

public static string RSAEncryptMessage(string msg) 
    { 
     var publicKeystr = 
     "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp+mrzAmFuuX1o2PZLA3C" + 
     "/X3c4BTiHbjhR2mF8N5fha5WuiwxNJHtXbJXka4euzhnEdgp4+9zpc7mplgLAMDa" + 
     "+BGKE7bjNrUmrckX2Aaaf+G1O1w1iU40+cTUm0NfZ6K0v4sLCpzqTnvjw5ilvliL" + 
     "B5+6vHxvKMHlS6l/tdHgbelv1e7fZZeOVPczS5TDfTkJqMFIoI4KzzcH6Izsxu+H" + 
     "EizWrT5zYkOCNLWQIpwcMq3h0EXc/qw7NAg/BRMg6HHVkbMNm3eTVzjDq3o77YKq" + 
     "NHo2Plt2U9DeT5WcsEIslL7SjNV8ib0KVHMBaVQFu+5emsI3dn3VWEV5ZPkBngX2" + 
     "NQIDAQAB"; 


     byte[] pubkeybytes = Convert.FromBase64String(publicKeystr); 
     System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); 
     System.Security.Cryptography.RSAParameters rsaParam = rsa.ExportParameters(false); 
     rsaParam.Modulus = pubkeybytes; 
     rsa.ImportParameters(rsaParam); 
     byte[] bytemsg = Encoding.ASCII.GetBytes(msg); 
     Console.WriteLine(bytemsg.Length); 
     byte[] encValue = rsa.Encrypt(bytemsg, false); 
     Console.WriteLine(encValue.Length); 
     return Convert.ToBase64String(encValue); 



    } 

私は暗号化していたメッセージは次のとおりです。

public static void Main() 
{ 

    Console.WriteLine(RSAEncryptMessage("1234")); 
    Console.ReadLine(); 

} 

た暗号文のサイズは294バイトです。 openSSLを使用して暗号化された同じ暗号文のサイズは256バイトです。長さの増加を引き起こしているC#は何ですか?これはパッディングの別のタイプですか?

+0

あなたの 'publicKeystr'はモジュラスのみを含んでいるとは思えませんが、何らかのエンコーディングで公開指数も持つべきです。 –

答えて

1

あなたのpublicKeystrは完全な公開鍵(モジュラスと指数)に見えますが、それを使ってrsaParam.Modulusを設定しています。

パブリックキーからモジュラスと指数を抽出し、これらを使用してrsaParam.ModulusrsaParam.Exponentを別々に設定するか、完全な公開キーを処理できるようにコードを変更する必要があります。

モジュラスを次のように設定すると、期待通りの効果が得られます。モジュラスと指数は、元のpublicKeystrから抽出された値です。

var modulus = 
    "p+mrzAmFuuX1o2PZLA3C/X3c4BTiHbjhR2mF8N5fha5WuiwxNJHtXbJXka4euzhn" + 
    "Edgp4+9zpc7mplgLAMDa+BGKE7bjNrUmrckX2Aaaf+G1O1w1iU40+cTUm0NfZ6K0" + 
    "v4sLCpzqTnvjw5ilvliLB5+6vHxvKMHlS6l/tdHgbelv1e7fZZeOVPczS5TDfTkJ" + 
    "qMFIoI4KzzcH6Izsxu+HEizWrT5zYkOCNLWQIpwcMq3h0EXc/qw7NAg/BRMg6HHV" + 
    "kbMNm3eTVzjDq3o77YKqNHo2Plt2U9DeT5WcsEIslL7SjNV8ib0KVHMBaVQFu+5e" + 
    "msI3dn3VWEV5ZPkBngX2NQ=="; 
var exponent = "AQAB"; 

rsaParam.Modulus = Convert.FromBase64String(modulus); 
rsaParam.Exponent = Convert.FromBase64String(exponent); 
関連する問題