2011-07-20 5 views
2

RSACryptoServiceProviderを使用してテキストを暗号化しました。私は公開鍵と秘密鍵をエクスポートしました。もちろん、私はちょうどデコーダアプリケーション内部の公開鍵を公開したいので、私は次のようにコードを書かれている:RSACryptoServiceProviderを使用して暗号化されたテキストを復号化する方法は?

private const string PublicKey = "<RSAKeyValue><Modulus>sIzQmj4vqK0QPd7RXKigD7Oi4GKPwvIPoiUyiKJMGP0qcbUkRPioe2psE/d3c1a2NY9oj4Da2y1qetjvKKFad2QAhXuql/gPIb1WmI+f6q555GClvHWEjrJrD/ho7SLoHbWd6oY6fY609N28lWJUYO97RLVaeg2jfNAUSu5bGC8=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; 

private string Decrypt() 
     { 
      byte[] encryptedKeyAsBytes = Convert.FromBase64String(_encryptedKey); 
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
      rsa.FromXmlString(PublicKey); 
      // read ciphertext, decrypt it to plaintext 
      byte[] plainBytes = rsa.Decrypt(encryptedKeyAsBytes, false); 
      string plainText = System.Text.Encoding.ASCII.GetString(plainBytes); 

      return plainText; 
     } 

をしかし、例外がライン「バイト[] plainBytes = rsa.Decrypt(encryptedKeyAsBytes、偽でスローされます); " と、「キーが存在しません」と表示されます。しかし私が秘密鍵と公開鍵全体を公開すると、それは楽しく実行されます。では、公開鍵情報のみを使用してデータをどのように復号化できますか?

答えて

5

短い答えは:できません。秘密鍵が必要なメッセージを復号化するには、それが非対称暗号の主な原則です。

公開鍵を使用してメッセージを暗号化し、対応するの秘密鍵キーを所有しているユーザーのみが復号化できるようにします。

パブリックキーはパブリックと呼ばれ、パブリックキーを唯一の所有者であるユーザーが読むメッセージを暗号化できるようにパブリックに安全に配布することができます。

+0

私は秘密鍵だけを渡すことができますか? – user848609

+0

公開鍵を隠すにはどうすればいいですか? – user848609

+0

あなたは秘密鍵を隠すことを意味します、そうですか?公開鍵を安全に公開できるためです。 – emboss

6

あなたはそれを公開鍵/秘密鍵の暗号化のポイントにすることはできません。パブリックは暗号化を行います。プライベートは復号化を行います。

キー交換のパターンが必要なようです。例えば;あなたのデコーダアプリケーションが別のデータソース(ソースアプリケーション)から情報を解読しようとしている場合、私は次のようなものを実装します:

  1. ソースアプリケーションはAESのような対称キーを生成します。
  2. デコーダアプリケーションは、公開鍵と秘密鍵のペアを生成します。
  3. ソースアプリケーションは、復号器アプリケーションに公開鍵を要求します。
  4. ソースアプリケーションは、公開鍵を使用して対称鍵を暗号化し、それを復号器アプリケーションに戻します。
  5. デコーダアプリケーションは、秘密鍵を使用して対称鍵を復号化します。
  6. デコーダアプリケーションは、ソースアプリケーションからシンメトリックキーで暗号化されたデータを取得します。
  7. デコーダアプリケーションは、交換された対称キーを使用して、受信した情報を復号化します。

例があります。ワイヤを介して送信される重要な情報なしに2つのアプリケーション間でデータを交換する方法の基本を示しています。対称キーはまったく必要ありません。大量の情報を暗号化するときにRSAが問題を導入し始めるため、非常に一般的なパターンです。 RSAは、代わりに対称暗号化キーを暗号化する方が良いです。

+0

ご協力いただきありがとうございます – user848609

1

問題は、暗号化と署名が混乱していることです。誰もがメッセージを書き込むことが、唯一の秘密鍵保持者がそれを読むことができる場所

暗号化があります。誰でも署名できるのは誰でもと読むことができますが、秘密鍵の所有者はと書くことができます。です。

Decryptを呼び出すと、RSACryptoServiceProviderは暗号化、つまりパブリックライトプライベートリードを探しています。したがって、秘密鍵を探します。

人々が書き込むことができないように、署名データにSignData関数とVerifyData関数を使用します。

関連する問題