1

クライアント側で復号化される情報の小さなチャンクの単純なサーバー側RSA暗号化を設定しようとしています。概念実証と同じように、公開鍵と秘密鍵をxmlから確実にロードできるように数行書きました。しかし、私は自分のマシンで最も単純なものでさえも機能させるのに苦労しています。

  byte[] bytes = Encoding.UTF8.GetBytes("Some text");
  bool fOAEP = true;

  // seeding a public and private key
  RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  var publicKey = rsa.ToXmlString(false);
  var privateKey = rsa.ToXmlString(true);

  //server side
  RSACryptoServiceProvider rsaServer = new RSACryptoServiceProvider();
  rsaServer.FromXmlString(privateKey);
  var encrypted = rsaServer.Encrypt(bytes, fOAEP);

  //client side
  RSACryptoServiceProvider rsaClient = new RSACryptoServiceProvider();
  rsaClient.FromXmlString(publicKey);
  var decrypted = rsaClient.Decrypt(encrypted, fOAEP);

Decryptを最後に呼び出すと、「OAEPパディングのデコード中にエラーが発生しました」というメッセージとともにCryptographicExceptionがスローされます。私はここで完全に明白な何かを見逃しているに違いありません。rsaインスタンスのセットアップを増やす必要がありますか、それとも最初のrsaシードインスタンスが必要ですか?

4

1 に答える 1

5

暗号化には公開鍵を使用し、復号化には秘密鍵を使用する必要があります。ここを見てください:RSACryptoServiceProviderは公開鍵で復号化します

それでは、RSACryptoServiceProviderクラスに戻りましょう。Encryptメソッドは公開鍵を使用してのみ暗号化し、Decryptメソッドは秘密鍵を使用してのみ復号化します。

于 2009-10-27T10:49:59.780 に答える