我想了一下,這一篇還是不用加解密的標題了,畢竟就現在技術來言,MD5和HASH還是不可逆的。
MD5我們用的還是比較多的,一般用來加密存儲密碼。但是現在很多人覺MD5可能不太安全了,所以都用上了SHA256等來做加密(雖然我覺得都差不多,MD5還是能玩)。
還是跟上一篇說的一樣,當一個算法的復雜度提高的同時肯定會帶來效率的降低,所以SHA和MD5比較起來的話,SHA更安全,MD5更高效。
由于HASH算法的不可逆性,所以我認為MD5和SHA主要還是應用在字符串的"加密"上。
由于.NET給我們提供的算法類庫很完善,所以實現這兩種算法的話還是比較簡單的,下面分別寫下MD5、SHA1、SHA256、SHA384、SHA512的實現方式
實現功能:
開發環境:
開發工具:Visual Studio 2013
.NET Framework版本:4.5
實現代碼:
public class Md5Util
{
public static byte[] Encrypt(byte[] data)
{
MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
return md5Provider.ComputeHash(data);
}
public static string Encrypt(string data)
{
byte[] bytes = Encrypt(Encoding.UTF8.GetBytes(data));
StringBuilder result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append(bytes[i].ToString("X2"));
}
return result.ToString();
}
}
public class ShaUtil
{
public static byte[] Encrypt(byte[] data, ShaType shaType)
{
HashAlgorithm ShaProvider = new SHA256CryptoServiceProvider();
switch (shaType)
{
case ShaType.SHA1:
ShaProvider = new SHA1CryptoServiceProvider();
break;
case ShaType.SHA256:
ShaProvider = new SHA256CryptoServiceProvider();
break;
case ShaType.SHA384:
ShaProvider = new SHA384CryptoServiceProvider();
break;
case ShaType.SHA512:
ShaProvider = new SHA512CryptoServiceProvider();
break;
}
return ShaProvider.ComputeHash(data);
}
public static string Encrypt(string data,ShaType shaType)
{
byte[] bytes = Encrypt(Encoding.UTF8.GetBytes(data), shaType);
StringBuilder result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append(bytes[i].ToString("X2"));
}
return result.ToString();
}
public enum ShaType
{
SHA1, SHA256, SHA384, SHA512
}
}
private void btn_Md5_Encrypt_Click(object sender, EventArgs e)
{
textBox2.Text = Md5Util.Encrypt(textBox1.Text);
}
private void btn_Sha1_Encrypt_Click(object sender, EventArgs e)
{
textBox2.Text = ShaUtil.Encrypt(textBox1.Text, ShaUtil.ShaType.SHA1);
}
private void btn_Sha256_Encrypt_Click(object sender, EventArgs e)
{
textBox2.Text = ShaUtil.Encrypt(textBox1.Text, ShaUtil.ShaType.SHA256);
}
private void btn_Sha384_Encrypt_Click(object sender, EventArgs e)
{
textBox2.Text = ShaUtil.Encrypt(textBox1.Text, ShaUtil.ShaType.SHA384);
}
private void btn_Sha512_Encrypt_Click(object sender, EventArgs e)
{
textBox2.Text = ShaUtil.Encrypt(textBox1.Text, ShaUtil.ShaType.SHA512);
}
實現效果:
呼呼,到這里,C#常用的幾種加密方式就寫完咯。
該文章在 2023/2/27 10:23:31 編輯過