2

RSA を使用して暗号化されたメッセージを復号化する必要がありますが、Modulus と Private Exponent は Base64 文字列しかありません。

私のアプローチは、RSAParameter オブジェクトを作成し、RSACryptoProvider.ImportParameters メソッドを使用してインポートすることでした。

RSAParameters decryptParameters = new RSAParameters();

// D is the private exponent parameter
decryptParameters.D = Convert.FromBase64String(d);

// n is the Modulus
decryptParameters.Modulus = Convert.FromBase64String(n);

RSACryptoServiceProvider decrypter = new RSACryptoServiceProvider();
try
{
     decrypter.ImportParameters(decryptParameters);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

問題は、常に「Bad Data」CryptographycException が発生することです。

私は何を間違っていますか?

RSAParameters 構造体の他の値を初期化する必要がありますか? どれ?理論的には、メッセージを復号化するために使用される秘密鍵は (n, d) であり、Modulus パラメーターが n である必要がありますが、実装にはさらに情報が必要なようです。

4

1 に答える 1

2

理論的には、復号化にはモジュラスとプライベート指数のみが必要です。ただし、APIに関しては、中国剰余定理に基づく最適化を使用するため、元の素数も必要であり、それらの素数を使用して dP、dQ、および Qinv を事前計算する必要もあります。

于 2012-11-12T13:34:54.187 に答える