MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。
还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带来效率的降低,所以SHA和MD5比较起来的话,SHA更安全,MD5更高效。
由于HASH算法的不可逆性,所以我认为MD5和SHA主要还是应用在字符串的"加密"上。
由于.NET给我们提供的算法类库很完善,所以实现这两种算法的话还是比较简单的,下面分别写下MD5、SHA1、SHA256、SHA384、SHA512的实现方式
实现功能:
- 使用MD5以及SHA1、SHA256、SHA384、SHA512等算法实现字符串"加密"
开发环境:
开发工具: Visual Studio 2013
.NET Framework版本:4.5
实现代码:
public class Md5Util
{
/// <summary>
/// MD5加密
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Encrypt(byte[] data)
{
MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
return md5Provider.ComputeHash(data);
}
/// <summary>
/// MD5加密字符串
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
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++)
{
//x2为小写,X2为大写
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++)
{
//x2为小写,X2为大写
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#常用的几种加密方式就写完咯。
由简入繁,拿来即用
更多精彩,请持续关注公众号: