2017-10-05 237 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

正在使用散列来生成密钥,而不是加密数据。 –

相关问题