.NET使用RSA加密解密的方法
更新時間:2019年03月28日 14:21:32 作者:風(fēng)靈使
這篇文章主要為大家詳細介紹了.NET使用RSA加密解密的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了.NET使用RSA加密解密的具體代碼,供大家參考,具體內(nèi)容如下
PassWordHelper.cs代碼:
using System; using System.IO; using System.Text; using System.Globalization; using System.Collections.Generic; using System.Security.Cryptography; namespace Utils { /// <summary> /// 密碼加密解密操作相關(guān)類 /// </summary> public static class PassWordHelper { #region MD5 加密 /// <summary> /// MD5加密 /// </summary> public static string Md532(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; MD5 md5 = MD5.Create(); return HashAlgorithmBase(md5, source, encoding); } /// <summary> /// 加鹽MD5加密 /// </summary> public static string Md532Salt(this string source, string salt) { return string.IsNullOrEmpty(source) ? source.Md532() : (source + "『" + salt + "』").Md532(); } #endregion #region SHA 加密 /// <summary> /// SHA1 加密 /// </summary> public static string Sha1(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; SHA1 sha1 = new SHA1CryptoServiceProvider(); return HashAlgorithmBase(sha1, source, encoding); } /// <summary> /// SHA256 加密 /// </summary> public static string Sha256(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; SHA256 sha256 = new SHA256Managed(); return HashAlgorithmBase(sha256, source, encoding); } /// <summary> /// SHA512 加密 /// </summary> public static string Sha512(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; SHA512 sha512 = new SHA512Managed(); return HashAlgorithmBase(sha512, source, encoding); } #endregion #region HMAC 加密 /// <summary> /// HmacSha1 加密 /// </summary> public static string HmacSha1(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA1 hmacSha1 = new HMACSHA1(keyStr); return HashAlgorithmBase(hmacSha1, source, encoding); } /// <summary> /// HmacSha256 加密 /// </summary> public static string HmacSha256(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA256 hmacSha256 = new HMACSHA256(keyStr); return HashAlgorithmBase(hmacSha256, source, encoding); } /// <summary> /// HmacSha384 加密 /// </summary> public static string HmacSha384(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA384 hmacSha384 = new HMACSHA384(keyStr); return HashAlgorithmBase(hmacSha384, source, encoding); } /// <summary> /// HmacSha512 加密 /// </summary> public static string HmacSha512(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA512 hmacSha512 = new HMACSHA512(keyStr); return HashAlgorithmBase(hmacSha512, source, encoding); } /// <summary> /// HmacMd5 加密 /// </summary> public static string HmacMd5(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACMD5 hmacMd5 = new HMACMD5(keyStr); return HashAlgorithmBase(hmacMd5, source, encoding); } /// <summary> /// HmacRipeMd160 加密 /// </summary> public static string HmacRipeMd160(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACRIPEMD160 hmacRipeMd160 = new HMACRIPEMD160(keyStr); return HashAlgorithmBase(hmacRipeMd160, source, encoding); } #endregion #region AES 加密解密 /// <summary> /// AES加密 /// </summary> /// <param name="source">待加密字段</param> /// <param name="keyVal">密鑰值</param> /// <param name="ivVal">加密輔助向量</param> /// <returns></returns> public static string AesStr(this string source, string keyVal, string ivVal) { var encoding = Encoding.UTF8; byte[] btKey = keyVal.FormatByte(encoding); byte[] btIv = ivVal.FormatByte(encoding); byte[] byteArray = encoding.GetBytes(source); string encrypt; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); encrypt = Convert.ToBase64String(mStream.ToArray()); } } aes.Clear(); return encrypt; } /// <summary> /// AES解密 /// </summary> /// <param name="source">待加密字段</param> /// <param name="keyVal">密鑰值</param> /// <param name="ivVal">加密輔助向量</param> /// <returns></returns> public static string UnAesStr(this string source, string keyVal, string ivVal) { var encoding = Encoding.UTF8; byte[] btKey = keyVal.FormatByte(encoding); byte[] btIv = ivVal.FormatByte(encoding); byte[] byteArray = Convert.FromBase64String(source); string decrypt; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); decrypt = encoding.GetString(mStream.ToArray()); } } aes.Clear(); return decrypt; } /// <summary> /// AES Byte類型 加密 /// </summary> /// <param name="data">待加密明文</param> /// <param name="keyVal">密鑰值</param> /// <param name="ivVal">加密輔助向量</param> /// <returns></returns> public static byte[] AesByte(this byte[] data, string keyVal, string ivVal) { byte[] bKey = new byte[32]; Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length); byte[] bVector = new byte[16]; Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length); byte[] cryptograph; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write)) { cStream.Write(data, 0, data.Length); cStream.FlushFinalBlock(); cryptograph = mStream.ToArray(); } } } catch { cryptograph = null; } return cryptograph; } /// <summary> /// AES Byte類型 解密 /// </summary> /// <param name="data">待解密明文</param> /// <param name="keyVal">密鑰值</param> /// <param name="ivVal">加密輔助向量</param> /// <returns></returns> public static byte[] UnAesByte(this byte[] data, string keyVal, string ivVal) { byte[] bKey = new byte[32]; Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length); byte[] bVector = new byte[16]; Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length); byte[] original; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream(data)) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read)) { using (MemoryStream originalMemory = new MemoryStream()) { byte[] buffer = new byte[1024]; int readBytes; while ((readBytes = cStream.Read(buffer, 0, buffer.Length)) > 0) { originalMemory.Write(buffer, 0, readBytes); } original = originalMemory.ToArray(); } } } } catch { original = null; } return original; } #endregion #region RSA 加密解密 //密鑰對,請配合密鑰生成工具使用『 http://download.csdn.net/detail/downiis6/9464639 』 private const string PublicRsaKey = @"<RSAKeyValue> <Modulus>8Yvf/LjXRhCuOREk2CuSYvbD/RadwJ4sjHREIpQVKwkTlG3BtRgpnaMcoeLAesmwvpBWnqK4hBkYLxhRj+NEKnlGrJ+LkNMnZr0/4CMuulZFAnx7iQYaSq7Eh7kBKGLofc05CjZguYpnPNxHIv4VNx+a9tIh+hnhjrmkJLUm3l0=</Modulus> <Exponent>AQAB</Exponent> </RSAKeyValue>"; private const string PrivateRsaKey = @"<RSAKeyValue> <Modulus>8Yvf/LjXRhCuOREk2CuSYvbD/RadwJ4sjHREIpQVKwkTlG3BtRgpnaMcoeLAesmwvpBWnqK4hBkYLxhRj+NEKnlGrJ+LkNMnZr0/4CMuulZFAnx7iQYaSq7Eh7kBKGLofc05CjZguYpnPNxHIv4VNx+a9tIh+hnhjrmkJLUm3l0=</Modulus> <Exponent>AQAB</Exponent> <P>/xAaa/4dtDxcEAk5koSZBPjuxqvKJikpwLA1nCm3xxAUMDVxSwQyr+SHFaCnBN9kqaNkQCY6kDCfJXFWPOj0Bw==</P> <Q>8m8PFVA4sO0oEKMVQxt+ivDTHFuk/W154UL3IgC9Y6bzlvYewXZSzZHmxZXXM1lFtwoYG/k+focXBITsiJepew==</Q> <DP>ONVSvdt6rO2CKgSUMoSfQA9jzRr8STKE3i2lVG2rSIzZosBVxTxjOvQ18WjBroFEgdQpg23BQN3EqGgvqhTSQw==</DP> <DQ>gfp7SsEM9AbioTDemHEoQlPly+FyrxE/9D8UAt4ErGX5WamxSaYntOGRqcOxcm1djEpULMNP90R0Wc7uhjlR+w==</DQ> <InverseQ>C0eBsp2iMOxWwKo+EzkHOP0H+YOitUVgjekGXmSt9a3TvikQNaJ5ATlqKsZaMGsnB6UIHei+kUaCusVX0HgQ2A==</InverseQ> <D>tPYxEfo9Nb3LeO+SJe3G1yO+w37NIwCdqYB1h15f2YUMSThNVmpKy1HnYpUp1RQDuVETw/duu3C9gJL8kAsZBjBrVZ0zC/JZsgvSNprfUK3Asc4FgFsGfQGKW1nvvgdMbvqr4ClB0R8czkki+f9Oc5ea/RMqXxlI+XjzMYDEknU=</D> </RSAKeyValue>"; /// <summary> /// RSA 加密 /// </summary> public static string Rsa(this string source) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PublicRsaKey); var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true); return Convert.ToBase64String(cipherbytes); } /// <summary> /// RSA解密 /// </summary> public static string UnRsa(this string source) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PrivateRsaKey); var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true); return Encoding.UTF8.GetString(cipherbytes); } #endregion #region DES 加密解密 /// <summary> /// DES 加密 /// </summary> public static string Des(this string source, string keyVal, string ivVal) { try { byte[] data = Encoding.UTF8.GetBytes(source); var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) }; var desencrypt = des.CreateEncryptor(); byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length); return BitConverter.ToString(result); } catch { return "轉(zhuǎn)換出錯!"; } } /// <summary> /// DES 解密 /// </summary> public static string UnDes(this string source, string keyVal, string ivVal) { try { string[] sInput = source.Split("-".ToCharArray()); byte[] data = new byte[sInput.Length]; for (int i = 0; i < sInput.Length; i++) { data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber); } var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) }; var desencrypt = des.CreateDecryptor(); byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length); return Encoding.UTF8.GetString(result); } catch { return "解密出錯!"; } } #endregion #region TripleDES 加密解密 /// <summary> /// DES3 加密 /// </summary> public static string Des3(this string source, string keyVal) { try { TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider { Key = keyVal.FormatByte(Encoding.UTF8), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; using (MemoryStream ms = new MemoryStream()) { byte[] btArray = Encoding.UTF8.GetBytes(source); try { using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(btArray, 0, btArray.Length); cs.FlushFinalBlock(); } return ms.ToArray().Bytes2Str(); } catch { return source; } } } catch { return "TripleDES加密出現(xiàn)錯誤"; } } /// <summary> /// DES3 解密 /// </summary> public static string UnDes3(this string source, string keyVal) { try { byte[] byArray = source.Str2Bytes(); TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider { Key = keyVal.FormatByte(Encoding.UTF8), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(byArray, 0, byArray.Length); cs.FlushFinalBlock(); cs.Close(); ms.Close(); return Encoding.UTF8.GetString(ms.ToArray()); } } } catch { return "TripleDES解密出現(xiàn)錯誤"; } } #endregion #region BASE64 加密解密 /// <summary> /// BASE64 加密 /// </summary> /// <param name="source">待加密字段</param> /// <returns></returns> public static string Base64(this string source) { var btArray = Encoding.UTF8.GetBytes(source); return Convert.ToBase64String(btArray, 0, btArray.Length); } /// <summary> /// BASE64 解密 /// </summary> /// <param name="source">待解密字段</param> /// <returns></returns> public static string UnBase64(this string source) { var btArray = Convert.FromBase64String(source); return Encoding.UTF8.GetString(btArray); } #endregion #region 內(nèi)部方法 /// <summary> /// 轉(zhuǎn)成數(shù)組 /// </summary> private static byte[] Str2Bytes(this string source) { source = source.Replace(" ", ""); byte[] buffer = new byte[source.Length / 2]; for (int i = 0; i < source.Length; i += 2) buffer[i / 2] = Convert.ToByte(source.Substring(i, 2), 16); return buffer; } /// <summary> /// 轉(zhuǎn)換成字符串 /// </summary> private static string Bytes2Str(this IEnumerable<byte> source, string formatStr = "{0:X2}") { StringBuilder pwd = new StringBuilder(); foreach (byte btStr in source) { pwd.AppendFormat(formatStr, btStr); } return pwd.ToString(); } private static byte[] FormatByte(this string strVal, Encoding encoding) { return encoding.GetBytes(strVal.Base64().Substring(0, 16).ToUpper()); } /// <summary> /// HashAlgorithm 加密統(tǒng)一方法 /// </summary> private static string HashAlgorithmBase(HashAlgorithm hashAlgorithmObj, string source, Encoding encoding) { byte[] btStr = encoding.GetBytes(source); byte[] hashStr = hashAlgorithmObj.ComputeHash(btStr); return hashStr.Bytes2Str(); } #endregion } }
Program.cs代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class Program { static void Main(string[] args) { string plainText = "這是一條被和諧的消息!"; //加密明文,獲得密文 string EncryptText= Utils.PassWordHelper.Rsa(plainText); Console.WriteLine(EncryptText); //解密密文,獲得明文 string DecryptText = Utils.PassWordHelper.UnRsa(EncryptText); Console.WriteLine(DecryptText); Console.ReadKey(); } } }
運行結(jié)果如圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
asp.net?core?中優(yōu)雅的進行響應(yīng)包裝的實現(xiàn)方法
本文介紹了 Asp.Net Core 中的通用響應(yīng)包裝的實現(xiàn),以及如何讓 Swagger 識別響應(yīng)包裝,由于異常處理難以做到通用和一致,本文不處理異常情況下的響應(yīng)包裝,讀者可以自定義實現(xiàn) ExceptionFilter2022-01-01DropDownList根據(jù)下拉項的Text文本序號排序
在某些時候表中沒有可以排序的字段同時呢也不想修改表結(jié)構(gòu),但它的項文本有序號這時就可以用這方法排序,感興趣的你可以參考下,或許本文知識點對你有所幫助2013-03-03asp.net Page.Controls對象(找到所有服務(wù)器控件)
通過此對象找到所有服務(wù)器控件。2008-11-11asp.net 利用NPOI導(dǎo)出Excel通用類的方法
本篇文章主要介紹了asp.net 利用NPOI導(dǎo)出Excel通用類的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06Repeater的FooterTemplate顯示某列總計思路與代碼
在Repeater的FooterTemplate顯示某列總計,接下來與大家分享詳細的實現(xiàn)方案,感興趣的各位可以參考下哈2013-03-03