2017-10-05 16 views
-2

私はCryptoServiceという名前のサービスを持っています。このサービスは、ICryptoServiceというインターフェースを継承しています。MD5CryptoServiceProviderを使用したC#での暗号化と復号

文字列の暗号化が動作していますが、ハッシュ結果の復号化では、復号化された文字列ではなくキーが返されます。ここ

は、私の暗号化コードです:

private string _salt = "*[email protected]#$%^&*()14344*";   
private string Crypto(string text) 
     { 
      var hashmd5 = new MD5CryptoServiceProvider(); 
      byte[] toEncryptArray = Encoding.UTF8.GetBytes(_salt); 

      byte[] keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(_salt)); 
      hashmd5.Clear(); 

      TripleDesProvider.Key = keyArray; 
      TripleDesProvider.Mode = CipherMode.ECB; 
      TripleDesProvider.Padding = PaddingMode.PKCS7; 

      ICryptoTransform cTransform = TripleDesProvider.CreateEncryptor(); 

      byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 

      return Convert.ToBase64String(resultArray, 0, resultArray.Length); 
     } 

私の解読コード:ここでアクションでスクリーンショットを提供

private string Decrypto(string text) 
     { 
      try 
      { 

       var hashmd5 = new MD5CryptoServiceProvider(); 
       byte[] toEncryptArray = Convert.FromBase64String(text); 

       byte[] keyArray = hashmd5.ComputeHash(Encoding.UTF8.GetBytes(_salt)); 

       hashmd5.Clear(); 

       TripleDesProvider.Key = keyArray; 
       TripleDesProvider.Mode = CipherMode.ECB; 
       TripleDesProvider.Padding = PaddingMode.PKCS7; 

       ICryptoTransform cTransform = TripleDesProvider.CreateDecryptor(); 
       byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 

       TripleDesProvider.Clear(); 

       return Encoding.UTF8.GetString(resultArray); 
       //return Encoding.UTF8.GetString(resultArray); 
      } 
      catch 
      { 
       return string.Empty; 
      } 
     } 

。ここ

enter image description here

私はインターネットで https://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C

を見つけた私のコードの参照はこれが働くことができない...

+0

私の質問にダウンボートを行うのではなく、あなたの意見や考えをここに落とすほうがよいでしょう。 – Chris

答えて

0

暗号化のtoEncryptArrayは、値_saltを取得します。あなたはtextを意味しました。

だから、あなたの解読はうまくいきます。

+0

私はそれに気付かなかった。私が暗号化しているのは私の塩の価値です。基本的に、暗号化と復号化が機能します。 暗号化で自分のパラメータを使用していません。 ありがとうございます。本当にありがとう、 – Chris

1

ありがとうございます。 MD5などのハッシュは一方向です。ハッシュ値から元のテキストを取得することはできません。

暗号化サービスが同じマシンで実行されている場合は、Data Protectionクラスを使用することをお勧めします。

+0

元のテキストをハッシュ値から得ることができないということは、解読できません。 私の参照では同じ実装になっていましたが、ハッシュ値を復号化しました。 投稿したリンクを確認してください。 お送りいただきありがとうございます。 – Chris

+0

データを暗号化するのではなく、鍵を生成するためにハッシュが使用されています。 –

関連する問題