C#加密算法總結
MD5加密
1 /// <summary> 2 /// MD5加密 3 /// </summary> 4 /// <param name="strPwd">原字符串</param> 5 /// <returns>加密後字符串</returns> 6 public static string GetMD5(string strPwd) 7 { 8 //MD5 對象創建的兩種方式 9 //MD5 md5 = MD5.Create(); 10 MD5 md5 = new MD5CryptoServiceProvider(); 11 //將輸入的密碼轉換成字節數組 12 byte[] bPwd = Encoding.UTF8.GetBytes(strPwd); 13 //計算指定字節數組的哈希值 14 byte[] bMD5 = md5.ComputeHash(bPwd); 15 //釋放加密服務提供類的所有資源 16 md5.Clear(); 17 StringBuilder sbMD5Pwd = new StringBuilder(); 18 for (int i = 0; i < bMD5.Length; i++) 19 { 20 //將每個字節數據轉換為2位的16進制的字符 21 sbMD5Pwd.Append(bMD5[i].ToString("x2")); 22 } 23 return sbMD5Pwd.ToString(); 24 }
SHA1加密
1 /// <summary> 2 /// 使用 SHA1 加密算法來加密 3 /// </summary> 4 /// <param name="sourceString">原字符串</param> 5 /// <returns>加密後字符串</returns> 6 public static string SHA1_Encrypt(string sourceString) 7 { 8 byte[] StrRes = Encoding.UTF8.GetBytes(sourceString); 9 HashAlgorithm iSHA = new SHA1CryptoServiceProvider(); 10 StrRes = iSHA.ComputeHash(StrRes); 11 StringBuilder EnText = new StringBuilder(); 12 foreach (byte iByte in StrRes) 13 { 14 EnText.AppendFormat("{0:x2}", iByte); 15 } 16 return EnText.ToString(); 17 }
SHA256加密
1 /// <summary> 2 /// SHA256 加密 3 /// </summary> 4 /// <param name="sourceString">原字符串</param> 5 /// <returns>加密後字符串</returns> 6 public static string SHA256_Encrypt(string sourceString) 7 { 8 byte[] data = Encoding.UTF8.GetBytes(sourceString); 9 SHA256 shaM = SHA256.Create(); 10 byte[] result = shaM.ComputeHash(data); 11 StringBuilder EnText = new StringBuilder(); 12 foreach (byte iByte in result) 13 { 14 EnText.AppendFormat("{0:x2}", iByte); 15 } 16 return EnText.ToString(); 17 }
SHA384加密
1 /// <summary> 2 /// SHA384 加密 3 /// </summary> 4 /// <param name="sourceString">原字符串</param> 5 /// <returns>加密後字符串</returns> 6 public static string SHA384_Encrypt(string sourceString) 7 { 8 byte[] data = Encoding.UTF8.GetBytes(sourceString); 9 SHA384 shaM = SHA384.Create(); 10 byte[] result = shaM.ComputeHash(data); 11 StringBuilder EnText = new StringBuilder(); 12 foreach (byte iByte in result) 13 { 14 EnText.AppendFormat("{0:x2}", iByte); 15 } 16 return EnText.ToString(); 17 }
SHA512加密
1 /// <summary> 2 /// SHA512_加密 3 /// </summary> 4 /// <param name="sourceString">原字符串</param> 5 /// <returns>加密後字符串</returns> 6 public static string SHA512_Encrypt(string sourceString) 7 { 8 byte[] data = Encoding.UTF8.GetBytes(sourceString); 9 SHA512 shaM = new SHA512Managed(); 10 byte[] result = shaM.ComputeHash(data); 11 StringBuilder EnText = new StringBuilder(); 12 foreach (byte iByte in result) 13 { 14 EnText.AppendFormat("{0:x2}", iByte); 15 } 16 return EnText.ToString(); 17 }
AES加密、解密
1 /// <summary> 2 /// AES加密 3 /// </summary> 4 /// <param name="encryptStr">加密字符串</param> 5 /// <param name="encryptKey">密鑰</param> 6 /// <returns>密碼</returns> 7 public static string AESEncrypt(string encryptStr, string encryptKey) 8 { 9 if (string.IsNullOrWhiteSpace(encryptStr)) 10 return string.Empty; 11 12 encryptKey = StringHelper.SubString(encryptKey, 32); 13 encryptKey = encryptKey.PadRight(32, ' '); 14 15 //分組加密算法 16 SymmetricAlgorithm des = Rijndael.Create(); 17 byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptStr);//得到需要加密的字節數組 18 //設置密鑰及密鑰向量 19 des.Key = Encoding.UTF8.GetBytes(encryptKey); 20 des.IV = _aeskeys; 21 byte[] cipherBytes = null; 22 using (MemoryStream ms = new MemoryStream()) 23 { 24 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) 25 { 26 cs.Write(inputByteArray, 0, inputByteArray.Length); 27 cs.FlushFinalBlock(); 28 cipherBytes = ms.ToArray();//得到加密後的字節數組 29 cs.Close(); 30 ms.Close(); 31 } 32 } 33 return Convert.ToBase64String(cipherBytes); 34 } 35 36 /// <summary> 37 /// AES解密 38 /// </summary> 39 /// <param name="decryptStr">解密字符串</param> 40 /// <param name="decryptKey">密鑰</param> 41 /// <returns>原碼</returns> 42 public static string AESDecrypt(string decryptStr, string decryptKey) 43 { 44 if (string.IsNullOrWhiteSpace(decryptStr)) 45 return string.Empty; 46 47 decryptKey = StringHelper.SubString(decryptKey, 32); 48 decryptKey = decryptKey.PadRight(32, ' '); 49 50 byte[] cipherText = Convert.FromBase64String(decryptStr); 51 52 SymmetricAlgorithm des = Rijndael.Create(); 53 des.Key = Encoding.UTF8.GetBytes(decryptKey); 54 des.IV = _aeskeys; 55 byte[] decryptBytes = new byte[cipherText.Length]; 56 using (MemoryStream ms = new MemoryStream(cipherText)) 57 { 58 using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read)) 59 { 60 cs.Read(decryptBytes, 0, decryptBytes.Length); 61 cs.Close(); 62 ms.Close(); 63 } 64 } 65 return Encoding.UTF8.GetString(decryptBytes).Replace("\0", "");//將字符串後尾的'\0'去掉 66 }