C# HASH算法之MD5、SHA

我想了一下,这一篇还是不用加解密的标题了,毕竟就现在技术来言,MD5和HASH还是不可逆的。

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# HASH算法之MD5、SHA

呼呼,到这里,C#常用的几种加密方式就写完咯。