我想了一下,這一篇還是不用加解密的標(biāo)題了,畢竟就現(xiàn)在技術(shù)來(lái)言,MD5和HASH還是不可逆的。
MD5我們用的還是比較多的,一般用來(lái)加密存儲(chǔ)密碼。但是現(xiàn)在很多人覺(jué)MD5可能不太安全了,所以都用上了SHA256等來(lái)做加密(雖然我覺(jué)得都差不多,MD5還是能玩)。
還是跟上一篇說(shuō)的一樣,當(dāng)一個(gè)算法的復(fù)雜度提高的同時(shí)肯定會(huì)帶來(lái)效率的降低,所以SHA和MD5比較起來(lái)的話,SHA更安全,MD5更高效。
由于HASH算法的不可逆性,所以我認(rèn)為MD5和SHA主要還是應(yīng)用在字符串的"加密"上。
由于.NET給我們提供的算法類(lèi)庫(kù)很完善,所以實(shí)現(xiàn)這兩種算法的話還是比較簡(jiǎn)單的,下面分別寫(xiě)下MD5、SHA1、SHA256、SHA384、SHA512的實(shí)現(xiàn)方式
實(shí)現(xiàn)功能:
開(kāi)發(fā)環(huán)境:
開(kāi)發(fā)工具:Visual Studio 2013
.NET Framework版本:4.5
實(shí)現(xiàn)代碼:
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);
}
實(shí)現(xiàn)效果:
呼呼,到這里,C#常用的幾種加密方式就寫(xiě)完咯。
該文章在 2023/2/27 10:23:31 編輯過(guò)