0

これはばかげた質問のように思えるかもしれませんが、私は過去 1 時間半ずっと探していました。RSA キー ペアのプライベート キーで暗号化されたメッセージがあります。メッセージを復号化するために使用する必要がある PUBLIC KEY があります。公開鍵を RSACryptoProvider にインポートする方法を探していましたが、方法が見つからないようです。単純に、係数と指数として BigInteger オブジェクトを使用します (公開鍵を構成します)。何かを解読する方法が見つからないようです。私が試してみました

System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
rsa.ImportParameters(new System.Security.Cryptography.RSAParameters { Exponent = BitConverter.GetBytes(12345), Modulus = BigInteger.Parse("HEX of public key", System.Globalization.NumberStyles.HexNumber).ToByteArray() });
_session.EncryptionKey = rsa.Decrypt(_session.EncryptionKey, false);

これは、キーが設定されていないことを示す CryptographicException をスローするだけです。公開鍵を使用して復号化したいことを知らせるためにフラグを立てる必要があるものはありますか?

4

3 に答える 3

2

これは、キーが設定されていないことを示す CryptographicException をスローするだけです。公開鍵を使用して復号化したいことを知らせるためにフラグを立てる必要があるものはありますか?

いいえ。高レベルおよび中レベルの暗号化ライブラリは、秘密鍵の暗号化や公開鍵の復号化などの異常な操作をサポートしていません。必要に応じて、数学的プリミティブを使用して RSA を実装する必要があります。

たぶん、代わりにデジタル署名メカニズムが必要ですか?

于 2013-04-03T13:09:17.590 に答える
0

Pavel の回答に基づいて、自分で計算するのが最善であると判断しました。私たちはで終わった

var encryptionKey = new BigInteger(_session.EncryptionKey);
var result = encryptionKey.modPow(12345, BigInteger.Parse("HEX of public key", System.Globalization.NumberStyles.HexNumber).ToByteArray());
_session.EncryptionKey = result.ToByteArray();

(途中でパディングが外れていますが、質問とは関係ないので省略しました)

すべての答えをありがとう:)

于 2013-04-03T23:06:57.510 に答える