您好,登錄后才能下訂單哦!
今天小編就為大家?guī)硪黄狢#中的常見加密解密類的文章。小編覺得挺不錯(cuò)的,為此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。
常見的加密方式分為可逆和不可逆兩種方式
可逆:RSA,AES,DES等
不可逆:常見的MD5,SHAD等
常見的加密方式封裝到一個(gè)Password類中
public class Password { /// <summary> /// 此代碼示例通過創(chuàng)建哈希字符串適用于任何 MD5 哈希函數(shù) (在任何平臺(tái)) 上創(chuàng)建 32 個(gè)字符的十六進(jìn)制格式哈希字符串 /// 官網(wǎng)案例改編 /// </summary> /// <param name="source"></param> /// <returns></returns> public static string Get32MD5One(string source) { using (System.Security.Cryptography.MD5 md5Hash = System.Security.Cryptography.MD5.Create()) { byte[] data = md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source)); System.Text.StringBuilder sBuilder = new System.Text.StringBuilder(); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } string hash = sBuilder.ToString(); return hash.ToUpper(); } } /// <summary> /// 獲取16位md5加密 /// </summary> /// <param name="source"></param> /// <returns></returns> public static string Get16MD5One(string source) { using (System.Security.Cryptography.MD5 md5Hash = System.Security.Cryptography.MD5.Create()) { byte[] data = md5Hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(source)); //轉(zhuǎn)換成字符串,并取9到25位 string sBuilder = BitConverter.ToString(data, 4, 8); //BitConverter轉(zhuǎn)換出來的字符串會(huì)在每個(gè)字符中間產(chǎn)生一個(gè)分隔符,需要去除掉 sBuilder = sBuilder.Replace("-", ""); return sBuilder.ToString().ToUpper(); } } //// <summary> /// </summary> /// <param name="strSource">需要加密的明文</param> /// <returns>返回32位加密結(jié)果,該結(jié)果取32位加密結(jié)果的第9位到25位</returns> public static string Get32MD5Two(string source) { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //獲取密文字節(jié)數(shù)組 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source)); //轉(zhuǎn)換成字符串,32位 string strResult = BitConverter.ToString(bytResult); //BitConverter轉(zhuǎn)換出來的字符串會(huì)在每個(gè)字符中間產(chǎn)生一個(gè)分隔符,需要去除掉 strResult = strResult.Replace("-", ""); return strResult.ToUpper(); } //// <summary> /// </summary> /// <param name="strSource">需要加密的明文</param> /// <returns>返回16位加密結(jié)果,該結(jié)果取32位加密結(jié)果的第9位到25位</returns> public static string Get16MD5Two(string source) { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); //獲取密文字節(jié)數(shù)組 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(source)); //轉(zhuǎn)換成字符串,并取9到25位 string strResult = BitConverter.ToString(bytResult, 4, 8); //BitConverter轉(zhuǎn)換出來的字符串會(huì)在每個(gè)字符中間產(chǎn)生一個(gè)分隔符,需要去除掉 strResult = strResult.Replace("-", ""); return strResult.ToUpper(); } //SHA為不可逆加密方式 public static string SHA1Encrypt(string normalTxt) { var bytes = System.Text.Encoding.Default.GetBytes(normalTxt); var SHA = new System.Security.Cryptography.SHA1CryptoServiceProvider(); var encryptbytes = SHA.ComputeHash(bytes); return Convert.ToBase64String(encryptbytes); } public static string SHA256Encrypt(string normalTxt) { var bytes = System.Text.Encoding.Default.GetBytes(normalTxt); var SHA256 = new System.Security.Cryptography.SHA256CryptoServiceProvider(); var encryptbytes = SHA256.ComputeHash(bytes); return Convert.ToBase64String(encryptbytes); } public static string SHA384Encrypt(string normalTxt) { var bytes = System.Text.Encoding.Default.GetBytes(normalTxt); var SHA384 = new System.Security.Cryptography.SHA384CryptoServiceProvider(); var encryptbytes = SHA384.ComputeHash(bytes); return Convert.ToBase64String(encryptbytes); } public string SHA512Encrypt(string normalTxt) { var bytes = System.Text.Encoding.Default.GetBytes(normalTxt); var SHA512 = new System.Security.Cryptography.SHA512CryptoServiceProvider(); var encryptbytes = SHA512.ComputeHash(bytes); return Convert.ToBase64String(encryptbytes); } /// <summary> /// 將base64格式,轉(zhuǎn)換utf8 /// </summary> /// <param name="content">解密內(nèi)容</param> /// <returns></returns> public static string Base64Decode(string content) { byte[] bytes = Convert.FromBase64String(content); return System.Text.Encoding.UTF8.GetString(bytes); } /// <summary> /// DES加密數(shù)據(jù) /// </summary> /// <param name="Text"></param> /// <param name="sKey"></param> /// <returns></returns> public static string DESEncryption(string Text, string sKey=null) { sKey = sKey ?? "zhiqiang"; try { System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider(); byte[] inputByteArray; inputByteArray = System.Text.Encoding.Default.GetBytes(Text); string md5SKey = Get32MD5One(sKey).Substring(0, 8); des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(md5SKey); des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(md5SKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); System.Text.StringBuilder ret = new System.Text.StringBuilder(); foreach (byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } return ret.ToString(); }catch { return "error"; } } /// <summary> /// DES解密數(shù)據(jù) /// </summary> /// <param name="Text"></param> /// <param name="sKey"></param> /// <returns></returns> public static string DESDecrypt(string Text, string sKey=null) { sKey = sKey ?? "zhiqiang"; try { System.Security.Cryptography.DESCryptoServiceProvider des = new System.Security.Cryptography.DESCryptoServiceProvider(); int len; len = Text.Length / 2; byte[] inputByteArray = new byte[len]; int x, i; for (x = 0; x < len; x++) { i = Convert.ToInt32(Text.Substring(x * 2, 2), 16); inputByteArray[x] = (byte)i; } string md5SKey = Get32MD5One(sKey).Substring(0, 8); des.Key = System.Text.ASCIIEncoding.ASCII.GetBytes(md5SKey); des.IV = System.Text.ASCIIEncoding.ASCII.GetBytes(md5SKey); System.IO.MemoryStream ms = new System.IO.MemoryStream(); System.Security.Cryptography.CryptoStream cs = new System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); return System.Text.Encoding.Default.GetString(ms.ToArray()); }catch { return "error"; } } /// <summary> /// RSA加密數(shù)據(jù) /// </summary> /// <param name="express"></param> /// <param name="sKey"></param> /// <returns></returns> public static string RSAEncryption(string express, string KeyContainerName = null) { System.Security.Cryptography.CspParameters param = new System.Security.Cryptography.CspParameters(); param.KeyContainerName = KeyContainerName ?? "zhiqiang"; //密匙容器的名稱,保持加密解密一致才能解密成功 using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(param)) { byte[] plaindata = System.Text.Encoding.Default.GetBytes(express);//將要加密的字符串轉(zhuǎn)換為字節(jié)數(shù)組 byte[] encryptdata = rsa.Encrypt(plaindata, false);//將加密后的字節(jié)數(shù)據(jù)轉(zhuǎn)換為新的加密字節(jié)數(shù)組 return Convert.ToBase64String(encryptdata);//將加密后的字節(jié)數(shù)組轉(zhuǎn)換為字符串 } } /// <summary> /// RSA解密數(shù)據(jù) /// </summary> /// <param name="express"></param> /// <param name="sKey"></param> /// <returns></returns> public static string RSADecrypt(string ciphertext, string KeyContainerName = null) { System.Security.Cryptography.CspParameters param = new System.Security.Cryptography.CspParameters(); param.KeyContainerName = KeyContainerName ?? "zhiqiang"; using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(param)) { byte[] encryptdata = Convert.FromBase64String(ciphertext); byte[] decryptdata = rsa.Decrypt(encryptdata, false); return System.Text.Encoding.Default.GetString(decryptdata); } } }
以上就是C#中的常見加密解密類的具體內(nèi)容,代碼詳細(xì)清楚,如果在日常工作遇到這個(gè)問題,希望你能通過這篇文章解決問題。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。