2009-09-27 21 views
5

私は.NETアプリケーションを持っています。ファイルに暗号化されたテキスト値を格納し、暗号化された値をコード内の別の場所に取得して解読する必要があります。シンプルなファイルの暗号化と復号化を行うにはどうすればよいですか?

地球上で最も強力で安全な暗号化方法は必要ありません。ちょっと言えば十分です。暗号化された値があり、それを復号化することができます

暗号化を試してみるためにネットで多くのものを検索しましたが、私が見つけた例のほとんどは概念を明確に定義していないし、最悪の部分は機械固有のようです。

本質的に、文字列値をファイルに暗号化してこれらの値を取得できる使いやすい暗号化メソッドへのリンクを送信できますか?

+0

「私は地球上で最も強力で安全な暗号化方法は必要ありません」 - なぜ暗号化するのですか?強力な暗号化を使用せず、その情報に価値がある場合、誰かがそれを解読する可能性は非常に高いです。 – TrueWill

+1

あなたはあなたの建物にどのようなセキュリティシステムを入れるかを尋ねているようですが、あなたは建物の中で何が貴重なものかを教えていません。銀行のセキュリティシステムは、大使館のセキュリティシステムとは非常に異なっています。何が脅かされているのかを知るまで、暗号アルゴリズムを推薦することはできません。問題で暗号化を行う前に、保護しているリソースと心配している脅威について説明してください。暗号化は適切な解決策ではないかもしれません。 ACLが適切なソリューション、またはその他のセキュリティ技術かもしれません。 –

+1

また、暗号化を安全にするものが鍵のセキュリティであることを忘れないでください。 *どのように安全な鍵管理を行うつもりですか?*それは難しい問題です。比較のために既製の暗号化アルゴリズムを使用するのは簡単です。 –

答えて

4

Stackoverflow拡張ライブラリには、& RSAで暗号化された文字列を暗号化するための2つの拡張機能があります。 Topic Here自分で数回使用しましたが、実際にはテストしていませんが、それはSO拡張ライブラリですので、テスト済みだとします。&安定しています。

暗号化;

public static string Encrypt(this string stringToEncrypt, string key) 
     { 
      if (string.IsNullOrEmpty(stringToEncrypt)) 
      { 
       throw new ArgumentException("An empty string value cannot be encrypted."); 
      } 

      if (string.IsNullOrEmpty(key)) 
      { 
       throw new ArgumentException("Cannot encrypt using an empty key. Please supply an encryption key."); 
      } 

      System.Security.Cryptography.CspParameters cspp = new System.Security.Cryptography.CspParameters(); 
      cspp.KeyContainerName = key; 

      System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(cspp); 
      rsa.PersistKeyInCsp = true; 

      byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true); 

      return BitConverter.ToString(bytes); 
     } 

復号化;

public static string Decrypt(this string stringToDecrypt, string key) 
     { 
      string result = null; 

      if (string.IsNullOrEmpty(stringToDecrypt)) 
      { 
       throw new ArgumentException("An empty string value cannot be encrypted."); 
      } 

      if (string.IsNullOrEmpty(key)) 
      { 
       throw new ArgumentException("Cannot decrypt using an empty key. Please supply a decryption key."); 
      } 

      try 
      { 
       System.Security.Cryptography.CspParameters cspp = new System.Security.Cryptography.CspParameters(); 
       cspp.KeyContainerName = key; 

       System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(cspp); 
       rsa.PersistKeyInCsp = true; 

       string[] decryptArray = stringToDecrypt.Split(new string[] { "-" }, StringSplitOptions.None); 
       byte[] decryptByteArray = Array.ConvertAll<string, byte>(decryptArray, (s => Convert.ToByte(byte.Parse(s, System.Globalization.NumberStyles.HexNumber)))); 


       byte[] bytes = rsa.Decrypt(decryptByteArray, true); 

       result = System.Text.UTF8Encoding.UTF8.GetString(bytes); 

      } 
      finally 
      { 
       // no need for further processing 
      } 

      return result; 
     } 
+0

正確には、私が探していた答え、うまくいくもの、過度に複雑ではないものです。これをRSAの詳細を学ぶためのリファレンスとして使用します。もう一度おねがいします。Tiax –

+0

短い文字列はOKですが、86文字を超える入力文字列は失敗します。一般に、RSAは大規模なデータ本体には適していません。 –

1

対称暗号化を検討している場合は、Enterprise Library Cryptography Application Blockと考えています。デビッドヘイデンhad a useful blog post about it、エンタープライズライブラリ2.0(現在は4.1です)でも、私はあなたがまだ有用であると思います。

+0

Richard、ありがとう、以前に使ったことありますか? –

+0

はい、使用するのは非常に簡単でしたが、設定ツールは非常に簡単でした。私は基本的に、暗号アプリケーションブロックの展開 - http://msdn.microsoft.com/en-us/library/dd203351.aspx – RichardOD

+0

@リチャードで説明されているシナリオで使用しました。ブログの例に従って忙しくしてからpoint ... http://s637.photobucket.com/albums/uu91/mleppan/?action=view¤t=Capture.pngこれは、ローカルのdevマシンで暗号化されたファイルを作成すると、それをホストされているWebサーバー上で解読しますか? –

0

ここでは、.NETが提供する暗号化ライブラリを使用して対称暗号化/復号化を行うブログ記事を掲載しています。

対称アルゴリズムは、車のドアをロックしたりロック解除するために1つのキーを使用するのと同じように、同じキーを使用して暗号化と復号化を行います。

公開鍵アルゴリズムは暗号化に1つの鍵を使用し、もう1つは復号化するため、暗号化されたファイルを送信することができ、鍵を非常に安全かつプライベートに保つことができるので、 。 .NETで

http://blog.binaryocean.com/2006/01/08/NETSymmetricEncryption.aspx

関連する問題