2017-10-05 1 views
-2

J'ai un service nommé CryptoService qui hérite de l'interface ICryptoService qui consiste en 2 méthodes Crypto Decrypto.Cryptage et décryptage en C# à l'aide de MD5CryptoServiceProvider

Le cryptage d'une chaîne est en cours de fonctionnement, mais le résultat du hachage Decryption retournera ma clé au lieu de la chaîne déchiffrée.

voici mon code de cryptage:

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); 
     } 

mon code de décryptage:

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; 
      } 
     } 

fourni ici la capture d'écran en action.

enter image description here

voici les références de mes codes j'ai trouvé dans Internet https://www.codeproject.com/Articles/14150/Encrypt-and-Decrypt-Data-with-C

Merci ..

+0

Il serait préférable que vous puissiez laisser tomber votre opinion ou votre idée ici au lieu de faire une réponse négative à ma question – Chris

Répondre

0

Votre toEncryptArray dans Encrypto obtient la valeur _salt. Vous vouliez dire text. Donc, bonne nouvelle, votre décryptage fonctionne.

+0

Je n'ai pas remarqué ça. Celui que je crypte est ma valeur de sel. Donc, fondamentalement, le chiffrement et le décryptage fonctionne. Je n'ai tout simplement pas utilisé mon paramètre dans Encryption. Merci de l'avoir signalé. Vraiment apprécié, – Chris

1

Cela ne peut pas fonctionner. Un hachage, tel que MD5, est unidirectionnel. Vous ne pouvez pas obtenir le texte d'origine à partir de la valeur de hachage.

Si votre service de chiffrement fonctionne sur la même machine, je suggère d'utiliser la classe Data Protection.

+0

Que voulez-vous dire que vous ne pouvez pas obtenir le texte original de la valeur de hachage, vous ne pouvez pas le déchiffrer? C'était exactement la même implémentation sur mes références mais sur cela il décrypte la valeur de hachage .. vérifier le lien que j'ai posté. BTW, Merci pour votre réponse. – Chris

+0

Le hachage est utilisé pour générer la clé et non pour crypter les données. –