Chà chà các bạn nói cái gì mà tôi ko hiểu được. Sao lại không thể giải mã vậy mã hóa để làm gì ???
Xin phép được trình bày 2 phương pháp Encrypt/Decrypt rất đơn giản dùng HashMD5 và TripleDES
Giải thích:
Dùng hàm Encrypt để mã hóa xâu password sau đó lưu xâu này vào CSDL
Code:
private static string Encrypt(string i_strEncrypt, bool i_blUseHashing)
{
byte[] v_arrKey;
byte[] v_arrEncrypt = new byte[(int)i_strEncrypt.Length];
try
{
v_arrEncrypt = UTF8Encoding.UTF8.GetBytes(i_strEncrypt);
}
catch (Exception v_ex)
{
MessageBoxInfo(v_ex.Message);
}
string v_strKey = "fatherofbill";
if (i_blUseHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
v_arrKey = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(v_strKey));
hashmd5.Clear();
}
else
{
v_arrKey = UTF8Encoding.UTF8.GetBytes(v_strKey);
}
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = v_arrKey;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(v_arrEncrypt, 0, v_arrEncrypt.Length);
tdes.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
Hàm Decrypt là hàm ngược của Encrypt dùng để giải mã dữ liệu đã mã hóa
Code:
public static string Decrypt(string cipherString, bool i_blUseHashing)
{
byte[] v_arrKey;
byte[] v_arrEncrypt = new byte[(int)cipherString.Length];
try
{
v_arrEncrypt = Convert.FromBase64String(cipherString);
}
catch (Exception v_ex)
{
MessageBoxInfo(v_ex.Message);
}
string v_strKey = "fatherofbill";
if (i_blUseHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
v_arrKey = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(v_strKey));
hashmd5.Clear();
}
else
{
v_arrKey = UTF8Encoding.UTF8.GetBytes(v_strKey);
}
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = v_arrKey;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(v_arrEncrypt, 0, v_arrEncrypt.Length);
tdes.Clear();
return UTF8Encoding.UTF8.GetString(resultArray);
}
Lưu ý:
- Hàm Decrypt trả lại giá trị ban đầu trước khi mã hóa. Do vậy để so khớp password bạn có thể decrypt password lưu trong CSDL và so sánh với pass người dùng nhập vào hoặc encrypt password do người dùng nhập vào sau đó so khớp với pass đã encrypt lưu trong CSDL. Dùng cách nào là tùy bạn lựa chọn
- Key dùng để mã hóa (Encrypt) và (Decrypt) phải trùng nhau
Bạn rass_it thử xem có vấn đề gì thì cùng trao đổi lại. Cái này tôi đang sử dụng trong ứng dụng của mình nên có thể đảm bảo là 100% it works
Bookmarks