C# HASH算法之MD5、SHA
				
									
					
					
						|  | 
							admin 2023年2月27日 10:23
								本文热度 1822 | 
					
				 
				    我想了一下,这一篇还是不用加解密的标题了,毕竟就现在技术来言,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 编辑过