2010-06-06 9 views
-1

J'ai une table dans ma base de données qui contient des données de sénat comme le mot de passe. Je veux crypter les données avant de les insérer dans la table et je ne veux pas déchiffrer les données. sans décryptageFonctions de cryptage C#

+0

Vous ne savez pas quelle est la question ...? –

Répondre

0

Si vous n'avez pas besoin de déchiffrer les données dont vous avez réellement besoin, par ex. SHA1 ou des algorithmes similaires fournis par .NET dans l'espace de noms System.Security.Cryptography.

1

Je vous recommande hashing the passwords with salt et stocke le mot de passe haché et le sel dans la base de données. Il y a aussi un autre article sur ce sujet.

+0

Quelques informations supplémentaires http://stackoverflow.com/questions/1300890/md5-hash-with-salt-for-keeping-password-in-db-in-c – abatishchev

0

I ont 2 fonctions pour crypter et décrypter des données:

La première fonction est utilisée pour décrypter les données et la seconde celle utilisée pour chiffrer les données.

using System.Security.Cryptography; 
using System.Collections.Generic; 
using System.ComponentModel; 

private static readonly byte[] _key = { 0xA1, 0xF1, 0xA6, 0xBB, 0xA2, 0x5A, 0x37, 0x6F, 0x81, 0x2E, 0x17, 0x41, 0x72, 0x2C, 0x43, 0x27 }; 
private static readonly byte[] _initVector = { 0xE1, 0xF1, 0xA6, 0xBB, 0xA9, 0x5B, 0x31, 0x2F, 0x81, 0x2E, 0x17, 0x4C, 0xA2, 0x81, 0x53, 0x61 }; 


private static string Decrypt(string Value) 
    { 
     SymmetricAlgorithm mCSP; 
     ICryptoTransform ct = null; 
     MemoryStream ms = null; 
     CryptoStream cs = null; 
     byte[] byt; 
     byte[] _result; 

     mCSP = new RijndaelManaged(); 

     try 
     { 
      mCSP.Key = _key; 
      mCSP.IV = _initVector; 
      ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); 


      byt = Convert.FromBase64String(Value); 

      ms = new MemoryStream(); 
      cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
      cs.Write(byt, 0, byt.Length); 
      cs.FlushFinalBlock(); 

      cs.Close(); 
      _result = ms.ToArray(); 
     } 
     catch 
     { 
      _result = null; 
     } 
     finally 
     { 
      if (ct != null) 
       ct.Dispose(); 
      if (ms != null) 
       ms.Dispose(); 
      if (cs != null) 
       cs.Dispose(); 
     } 

     return ASCIIEncoding.UTF8.GetString(_result); 
    } 



private static string Encrypt(string Password) 
    { 
     if (string.IsNullOrEmpty(Password)) 
      return string.Empty; 

     byte[] Value = Encoding.UTF8.GetBytes(Password); 
     SymmetricAlgorithm mCSP = new RijndaelManaged(); 
     mCSP.Key = _key; 
     mCSP.IV = _initVector; 
     using (ICryptoTransform ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV)) 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       using (CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write)) 
       { 
        cs.Write(Value, 0, Value.Length); 
        cs.FlushFinalBlock(); 
        cs.Close(); 
        return Convert.ToBase64String(ms.ToArray()); 
       } 
      } 
     } 
    } 

J'espère que ces 2 fonctions peuvent vous aider.

0

utiliser une fonction de hachage comme SHA256:

using System.Security.Cryptography; 
/// <summary> 
/// Hash the given string with sha256 
/// </summary> 
/// <param name="password">the string to hash</param> 
/// <returns>The hex representation of the hash</returns> 
static string sha256(string password) 
{ 
    SHA256Managed crypt = new SHA256Managed(); 
    string hash = String.Empty; 
    byte[] crypto = crypt.ComputeHash(Encoding.ASCII.GetBytes(password), 0, Encoding.ASCII.GetByteCount(password)); 
    foreach (byte bit in crypto) 
    { 
     hash += bit.ToString("x2"); 
    } 
    return hash; 
} 

Il donne toujours la même sortie pour la même entrée, afin que vous puissiez comparer les valeurs hachurées. Vous devriez également envisager de saler l'entrée (en ajoutant ou en ajoutant une valeur spécifique à votre application/programme afin de rendre les tables arc-en-ciel moins utiles)