2

私のサーバーは RSACryptoServiceProvider を作成し、そのパラメーターを変数 (RSAKeyInfo) にエクスポートします。

次に、公開鍵がクライアントに送信され、クライアントはその公開鍵で何かを暗号化します。

ここで、サーバーに送り返すときに、まさにこのデータを復号化できる必要があります。そのため、RSA が私の場合に役立つのです。

ただし、以前に作成された最初の RSACryptoServiceProvider からインポートされたパラメーターを使用して RSACryptoServiceProvider を再作成しようとすると、「Bad Data」例外が発生します。

...コードはより明確になる可能性があります。

暗号の作成:

class Cryptograph
{
    public Cryptograph()
    {
        this.RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);
    }
}

復号化のために後でアクセスする:

byte[] encrypted = ...;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(this.Cryptograph.RSAKeyInfo);

byte[] decrypted = rsa.Decrypt(encrypted, false);
Console.WriteLine(Utilities.ByteArrayToHexString(decrypted));

次の行で「Bad Data」例外が発生します。

byte[] decrypted = rsa.Decrypt(encrypted, false);

私は何を間違っていますか?どうすれば適切に行うことができますか?ありがとうございました :)

PS: MSDN や明らかな Google 検索結果のリンクを送らないでください。これらのページをすべて読みましたが、まだ機能しません。

4

2 に答える 2

3

何かが公開鍵で暗号化されている場合、復号化には秘密鍵を使用する必要があります。復号化に秘密鍵を使用している場所がわかりません。

既にお読みになっていると思いますが、暗号化ページとこの復号化ページを読み、次の手順に従っていることを確認してください: http://msdn.microsoft.com/en-us/library/te15te69. aspx

パスワードなどの非常に短いメッセージを暗号化する場合を除き、対称キーの暗号化には通常、RSA 暗号化を使用する必要があります。これは、長いメッセージの暗号化/復号化を高速化します。

公開鍵で暗号化できるサイズは、鍵の長さに関係しています。

于 2009-08-29T05:14:29.527 に答える
0

パディングを使用しない暗号化/復号化が必要でしたが、C#.NET は既定でそれを提供していません。OpenSSL.NET はその仕事をしますが、それを使おうとしている間に立ち往生しています。(私がそれを機能させるのを手伝いたい場合は、この質問を参照してください)。:(

于 2009-09-08T22:07:13.087 に答える