2017-10-05 238 views
-2

我有一個名爲CryptoService的服務,它繼承了由2個方法Crypto Decrypto函數組成的接口ICryptoService。在C#中使用MD5CryptoServiceProvider進行加密和解密

字符串的加密工作正常,但哈希結果的解密將返回我的密鑰而不是Decrypted字符串。

這裏是我的加密代碼:

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

這會更好,你可以放棄你的意見或想法在這裏,而不是做一個downvote我的問題 – Chris

回答

0

您在加密中的toEncryptArray的值爲_salt。你的意思是text

所以,好消息,你的解密工作。

+0

我沒注意到。我正在加密的是我的鹽值。所以基本上,加密和解密工作。 我只是沒有在加密中使用我的參數。 謝謝你指出。萬分感激, – Chris

1

這可不行。散列,如MD5,是單向的。您無法從哈希值中獲取原始文本。

如果你的加密服務運行在同一臺機器上,我建議使用Data Protection類。

+0

你是什麼意思,你不能從哈希值獲得原始文本,你不能解密它? 這只是我的參考相同的實現,但它解密的哈希值.. 檢查我張貼的鏈接。 順便說一句,感謝您的回覆。 – Chris

+0

正在使用散列來生成密鑰,而不是加密數據。 –

相關問題