在做项目的过程中,一般都会涉及到用户名和密码。而这个时候密码就需要加密一下,在这里我就用Md5加密了。而很多人会有这个疑问,Md5可以在线转换,是的,的确可以在线转换,那么你可以试试多加密几次,这样在线工具解密的难度就会大大增大。而Base64和DES可加密也可解密,上代码。
1、Md5加密。
1 static void Main(string[] args) 2 { 3 //在这里我加密了3次。 4 string str =Encrypt(Encrypt(Encrypt(Encrypt("123456")))); 5 Console.WriteLine(str); 6 Console.ReadLine(); 7 } 8 9 /// <summary> 10 /// 此方法用于加密字符串。 11 /// </summary> 12 /// <param name="str">加密的字符串。</param> 13 /// <returns>返回加密后的字符串。</returns> 14 public static string Encrypt(string str) 15 { 16 //创建Md5。 17 MD5 md5 = MD5.Create(); 18 //将要加密的字符串转换成字节数组。 19 byte[] buffer = UTF8Encoding.UTF8.GetBytes(str); 20 //通过ComputeHash函数进行加密,加密后返回的是字节数组。 21 byte[] result = md5.ComputeHash(buffer); 22 //声明一个字符串,用于存储解析后的加密字符串。 23 StringBuilder sb = new StringBuilder(); 24 //循环遍历将字节数组转换为字符串。 25 foreach (byte item in result) 26 { 27 //累加。 28 sb.Append(item.ToString("X2")); 29 } 30 //返回加密后的字符串。 31 return sb.ToString(); 32 }
2、Base64加密解密。
1 /// <summary> 2 /// Base64加密。 3 /// </summary> 4 /// <param name="encryptStr">要加密的字符串。</param> 5 /// <returns>返回加密后的字符串。</returns> 6 public static string Base64Encrypt(string encryptStr) 7 { 8 //将字符串转换成字节数组。 9 byte[] buffer = Encoding.UTF8.GetBytes(encryptStr); 10 //ToBase64String():将8位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式 11 return Convert.ToBase64String(buffer); 12 } 13 14 /// <summary> 15 /// Base64解密。 16 /// </summary> 17 /// <param name="decryptStr">要解密的字符串。</param> 18 /// <returns>将解密后的字符串返回。</returns> 19 public static string Base64Decrypt(string decryptStr) 20 { 21 //将指定的字符串(它将二进制数据编码为 Base64 数字)转换为等效的 8 位无符号整数数组。 22 byte[] buffer = Convert.FromBase64String(decryptStr); 23 //将加密后的数据解密后返回出去。 24 return Encoding.UTF8.GetString(buffer); 25 }
3、Des加密解密。
1 /// <summary> 2 /// 加密值key,这个地方一定是4个字符的,如果写成tes就会报错,报错内容为【指定键的大小对于此算法无效】 3 /// </summary> 4 public static string encryptKey = "test"; 5 6 /// <summary> 7 /// Des加密。 8 /// </summary> 9 /// <param name="encryptStr">要加密的字符串。</param> 10 /// <returns>返回加密后的字符串。</returns> 11 public static string DesEncrypt(string encryptStr) 12 { 13 using (DESCryptoServiceProvider desCSP = new DESCryptoServiceProvider()) 14 { 15 byte[] keyByte = Encoding.Unicode.GetBytes(encryptKey); 16 //定义字节数组,用于存储要解密的字符串。 17 byte[] dataByte = Encoding.Unicode.GetBytes(encryptStr); 18 //实例化一个流。 19 using (MemoryStream memoryStream = new MemoryStream()) 20 { 21 //使用内存流实例化加密对象。 22 using (CryptoStream cs = new CryptoStream(memoryStream, desCSP.CreateEncryptor(keyByte, keyByte), CryptoStreamMode.Write)) 23 { 24 //加密流中写入数据。 25 cs.Write(dataByte, 0, dataByte.Length); 26 } 27 //返回加密后的数据。 28 return Convert.ToBase64String(memoryStream.ToArray()); 29 } 30 } 31 } 32 33 /// <summary> 34 /// Des解密。 35 /// </summary> 36 /// <param name="decryptStr">要解密的字符串。</param> 37 /// <returns>返回解密后的字符串。</returns> 38 public static string DesDecrypt(string decryptStr) 39 { 40 using (DESCryptoServiceProvider desCSP = new DESCryptoServiceProvider()) 41 { 42 //定义字节数组,用来存储密钥。 43 byte[] keyByte = Encoding.Unicode.GetBytes(encryptKey); 44 //定义字节数组,用来存储要解密的字符串。 45 byte[] dataByte = Convert.FromBase64String(decryptStr); 46 //实例化一个流。 47 using (MemoryStream memoryStream = new MemoryStream()) 48 { 49 //使用内存流实例化加密对象。 50 using (CryptoStream cs = new CryptoStream(memoryStream, desCSP.CreateDecryptor(keyByte, keyByte), CryptoStreamMode.Write)) 51 { 52 //加密流中写入数据。 53 cs.Write(dataByte, 0, dataByte.Length); 54 } 55 //返回解密后的字符串。 56 return Encoding.Unicode.GetString(memoryStream.ToArray()); 57 } 58 } 59 }
End。