0
Unhandled Exception: System.Security.Cryptography.CryptographicException: Private/public key mismatch
  at Mono.Security.Cryptography.RSAManaged.ImportParameters (RSAParameters parameters) [0x00000] in <filename unknown>:0 
  at System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters (RSAParameters parameters) [0x00000] in <filename unknown>:0 
  at BlaBlaFunc() [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.Security.Cryptography.CryptographicException: Private/public key mismatch
  at Mono.Security.Cryptography.RSAManaged.ImportParameters (RSAParameters parameters) [0x00000] in <filename unknown>:0 
  at System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters (RSAParameters parameters) [0x00000] in <filename unknown>:0 
  at BlaBlaFunc() [0x00000] in <filename unknown>:0 

ソースコードは次のとおりです。

    string foo = "blabla";

    System.Security.Cryptography.RSAParameters rsa_params = new System.Security.Cryptography.RSAParameters();

    rsa_params.Modulus = Enumerable.Range(0, pubkey.Length)
                         .Where(x => x % 2 == 0)
                         .Select(x => System.Convert.ToByte(pubkey.Substring(x, 2), 16))
                         .ToArray();
    rsa_params.Exponent = new byte[] { 1, 0, 1 };
    System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
    System.Security.Cryptography.RSAParameters d = rsa.ExportParameters(false);
    rsa.ImportParameters(rsa_params);

    byte[] sp = rsa.Encrypt(Encoding.UTF8.GetBytes(foo), false);

Windows で正常に動作する .exe ファイルは、vs2010 でコンパイルされています。Ubuntuの下でモノで実行されました。

次のコマンドで実行します。

  mono --runtime=v4.0.30319 xxx.exe

どうすればこれを修正できますか?

4

1 に答える 1

2

どうやら、引数に指定したExportParametersにもかかわらず、呼び出しは秘密鍵を含む鍵ペアを生成します。(ソースコードを参照してください)。次に、公開鍵のみを上書きします(秘密鍵を提供しないため)。したがって、不一致が発生します。文書化された動作と一致しない場合、これは単一のバグである可能性があります。それを確認し、該当する場合はバグを報告してください。falseincludePrivateParametersImportParameters

回避策として、 を削除するExportParametersか、インポート先の新しいインスタンスを作成できます。

于 2013-09-23T13:43:09.090 に答える