首页 > 编程 > .NET > 正文

ASP.NET加密解密算法分享

2024-07-10 13:28:55
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要分享的是ASP.NET实现的加密解密算法,非常的简单使用,有需要的小伙伴快来参考下吧。

 

 
  1. #region DES加密解密 
  2. /// <summary> 
  3. /// DES加密 
  4. /// </summary> 
  5. /// <param name="strSource">待加密字串</param> 
  6. /// <param name="key">32位Key值</param> 
  7. /// <returns>加密后的字符串</returns> 
  8. public string DESEncrypt(string strSource) 
  9. { 
  10. return DESEncrypt(strSource, DESKey); 
  11. } 
  12. public string DESEncrypt(string strSource, byte[] key) 
  13. { 
  14. SymmetricAlgorithm sa = Rijndael.Create(); 
  15. sa.Key = key; 
  16. sa.Mode = CipherMode.ECB; 
  17. sa.Padding = PaddingMode.Zeros; 
  18. MemoryStream ms = new MemoryStream(); 
  19. CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write); 
  20. byte[] byt = Encoding.Unicode.GetBytes(strSource); 
  21. cs.Write(byt, 0, byt.Length); 
  22. cs.FlushFinalBlock(); 
  23. cs.Close(); 
  24. return Convert.ToBase64String(ms.ToArray()); 
  25. } 
  26. /// <summary> 
  27. /// DES解密 
  28. /// </summary> 
  29. /// <param name="strSource">待解密的字串</param> 
  30. /// <param name="key">32位Key值</param> 
  31. /// <returns>解密后的字符串</returns> 
  32. public string DESDecrypt(string strSource) 
  33. { 
  34. return DESDecrypt(strSource, DESKey); 
  35. } 
  36. public string DESDecrypt(string strSource, byte[] key) 
  37. { 
  38. SymmetricAlgorithm sa = Rijndael.Create(); 
  39. sa.Key = key; 
  40. sa.Mode = CipherMode.ECB; 
  41. sa.Padding = PaddingMode.Zeros; 
  42. ICryptoTransform ct = sa.CreateDecryptor(); 
  43. byte[] byt = Convert.FromBase64String(strSource); 
  44. MemoryStream ms = new MemoryStream(byt); 
  45. CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read); 
  46. StreamReader sr = new StreamReader(cs, Encoding.Unicode); 
  47. return sr.ReadToEnd(); 
  48. } 
  49. #endregion 
  50. #region 一个用hash实现的加密解密方法 
  51. /// <summary> 
  52. /// 加密 
  53. /// </summary> 
  54. /// <param name="src"></param> 
  55. /// <returns></returns> 
  56. public static string EncryptStrByHash(string src) 
  57. { 
  58. if (src.Length == 0) 
  59. { 
  60. return ""; 
  61. } 
  62. byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src + "Test").ToCharArray()); 
  63. byte[] HaData = new byte[20]; 
  64. HMACSHA1 Hmac = new HMACSHA1(HaKey); 
  65. CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write); 
  66. try 
  67. { 
  68. cs.Write(HaData, 0, HaData.Length); 
  69. } 
  70. finally 
  71. { 
  72. cs.Close(); 
  73. } 
  74. string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16); 
  75. byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray()); 
  76. byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray()); 
  77. byte[] EncodedBytes = { }; 
  78. MemoryStream ms = new MemoryStream(); 
  79. RijndaelManaged rv = new RijndaelManaged(); 
  80. cs = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write); 
  81. try 
  82. { 
  83. cs.Write(RiDataBuf, 0, RiDataBuf.Length); 
  84. cs.FlushFinalBlock(); 
  85. EncodedBytes = ms.ToArray(); 
  86. } 
  87. finally 
  88. { 
  89. ms.Close(); 
  90. cs.Close(); 
  91. } 
  92. return HaResult + System.Convert.ToBase64String(EncodedBytes); 
  93. } 
  94. /// <summary> 
  95. /// 解密 
  96. /// </summary> 
  97. /// <param name="src"></param> 
  98. /// <returns></returns> 
  99. public static string DecrypStrByHash(string src) 
  100. { 
  101. if (src.Length < 40) return ""; 
  102. byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16)); 
  103. byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray()); 
  104. byte[] InitialText = new byte[SrcBytes.Length]; 
  105. RijndaelManaged rv = new RijndaelManaged(); 
  106. MemoryStream ms = new MemoryStream(SrcBytes); 
  107. CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read); 
  108. try 
  109. { 
  110. cs.Read(InitialText, 0, InitialText.Length); 
  111. } 
  112. finally 
  113. { 
  114. ms.Close(); 
  115. cs.Close(); 
  116. } 
  117. System.Text.StringBuilder Result = new System.Text.StringBuilder(); 
  118. for (int i = 0; i < InitialText.Length; ++i) if (InitialText[i] > 0) Result.Append((char)InitialText[i]); 
  119. return Result.ToString(); 
  120. } 
  121. /// <summary> 
  122. /// 对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串 
  123. /// </summary> 
  124. /// <param name="s"></param> 
  125. /// <returns></returns> 
  126. public string ReEncryptStrByHash(string s) 
  127. { 
  128. string e = Encrypt.EncryptStrByHash(s); 
  129. return ((e.Length > 16) ? e.Substring(16) : ""); 
  130. } 
  131. #endregion 
  132. #region Md5加密,生成16位或32位,生成的密文都是大写 
  133. public static string Md5To16(string str) 
  134. { 
  135. MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
  136. string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)), 4, 8); 
  137. t2 = t2.Replace("-", ""); 
  138. return t2; 
  139. } 
  140. //// <summary> 
  141. /// MD5 32位加密 
  142. /// </summary> 
  143. /// <param name="str"></param> 
  144. /// <returns></returns> 
  145. public static string Md5To32(string str) 
  146. { 
  147. string pwd = ""; 
  148. MD5 md5 = MD5.Create(); 
  149. byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); 
  150. for (int i = 0; i < s.Length; i++) 
  151. { 
  152. pwd = pwd + s[i].ToString("X"); 
  153. } 
  154. return pwd; 
  155. } 
  156. #endregion 
  157. #region 3DES加密解密 
  158. public string Encrypt3DES(string str) 
  159. { 
  160. //密钥 
  161. string sKey = "wyw308"; 
  162. // //矢量,可为空 
  163. string sIV = "scf521"; 
  164. // //构造对称算法 
  165. SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  166. ICryptoTransform ct; 
  167. MemoryStream ms; 
  168. CryptoStream cs; 
  169. byte[] byt; 
  170. mCSP.Key = Convert.FromBase64String(sKey); 
  171. mCSP.IV = Convert.FromBase64String(sIV); 
  172. mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  173. mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  174. ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); 
  175. byt = Encoding.UTF8.GetBytes(str); 
  176. ms = new MemoryStream(); 
  177. cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  178. cs.Write(byt, 0, byt.Length); 
  179. cs.FlushFinalBlock(); 
  180. cs.Close(); 
  181. return Convert.ToBase64String(ms.ToArray()); 
  182. } 
  183. /// <summary> 
  184. /// 带指定密钥和矢量的3DES加密 
  185. /// </summary> 
  186. /// <param name="str"></param> 
  187. /// <param name="sKey"></param> 
  188. /// <param name="sIV"></param> 
  189. /// <returns></returns> 
  190. public string Encrypt3DES(string str, string sKey, string sIV) 
  191. { 
  192. SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  193. ICryptoTransform ct; 
  194. MemoryStream ms; 
  195. CryptoStream cs; 
  196. byte[] byt; 
  197. mCSP.Key = Convert.FromBase64String(sKey); 
  198. mCSP.IV = Convert.FromBase64String(sIV); 
  199. mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  200. mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  201. ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); 
  202. byt = Encoding.UTF8.GetBytes(str); 
  203. ms = new MemoryStream(); 
  204. cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  205. cs.Write(byt, 0, byt.Length); 
  206. cs.FlushFinalBlock(); 
  207. cs.Close(); 
  208. return Convert.ToBase64String(ms.ToArray()); 
  209. } 
  210. //解密 
  211. public string Decrypt3DES(string Value) 
  212. { 
  213. string sKey = "wyw308"; 
  214. string sIV = "scf521"; 
  215. SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  216. ICryptoTransform ct; 
  217. MemoryStream ms; 
  218. CryptoStream cs; 
  219. byte[] byt; 
  220. mCSP.Key = Convert.FromBase64String(sKey); 
  221. mCSP.IV = Convert.FromBase64String(sIV); 
  222. mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  223. mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  224. ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); 
  225. byt = Convert.FromBase64String(Value); 
  226. ms = new MemoryStream(); 
  227. cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  228. cs.Write(byt, 0, byt.Length); 
  229. cs.FlushFinalBlock(); 
  230. cs.Close(); 
  231. return Encoding.UTF8.GetString(ms.ToArray()); 
  232. } 
  233. /// <summary> 
  234. /// 带指定密钥和矢量的3DES解密 
  235. /// </summary> 
  236. /// <param name="Value"></param> 
  237. /// <param name="sKey"></param> 
  238. /// <param name="sIV"></param> 
  239. /// <returns></returns> 
  240. public string Decrypt3DES(string str, string sKey, string sIV) 
  241. { 
  242. SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  243. ICryptoTransform ct; 
  244. MemoryStream ms; 
  245. CryptoStream cs; 
  246. byte[] byt; 
  247. mCSP.Key = Convert.FromBase64String(sKey); 
  248. mCSP.IV = Convert.FromBase64String(sIV); 
  249. mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  250. mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  251. ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); 
  252. byt = Convert.FromBase64String(str); 
  253. ms = new MemoryStream(); 
  254. cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  255. cs.Write(byt, 0, byt.Length); 
  256. cs.FlushFinalBlock(); 
  257. cs.Close(); 
  258. return Encoding.UTF8.GetString(ms.ToArray()); 
  259. } 
  260. #endregion 
  261. #region 一个简单的加密解密方法,只支持英文 
  262. public static string EnCryptEnStr(string str) //倒序加1加密 
  263. { 
  264. byte[] by = new byte[str.Length]; 
  265. for (int i = 0; 
  266. i <= str.Length - 1; 
  267. i++) 
  268. { 
  269. by[i] = (byte)((byte)str[i] + 1); 
  270. } 
  271. str = ""; 
  272. for (int i = by.Length - 1; 
  273. i >= 0; 
  274. i--) 
  275. { 
  276. str += ((char)by[i]).ToString(); 
  277. } 
  278. return str; 
  279. } 
  280. public static string DeCryptEnStr(string str) //顺序减1解码 
  281. { 
  282. byte[] by = new byte[str.Length]; 
  283. for (int i = 0; 
  284. i <= str.Length - 1; 
  285. i++) 
  286. { 
  287. by[i] = (byte)((byte)str[i] - 1); 
  288. } 
  289. str = ""; 
  290. for (int i = by.Length - 1; 
  291. i >= 0; 
  292. i--) 
  293. { 
  294. str += ((char)by[i]).ToString(); 
  295. } 
  296. return str; 
  297. } 
  298. #endregion 
  299. #region 一个简单的加密解密方法,在上一个的基础上支持中文 
  300. public static string EnCryptCnStr(string str) 
  301. { 
  302. string htext = ""; // blank text 
  303. for (int i = 0; i < str.Length; i++) 
  304. { 
  305. htext = htext + (char)(str[i] + 10 - 1 * 2); 
  306. } 
  307. return htext; 
  308. } 
  309. public static string DeCryptCnStr(string str) 
  310. { 
  311. string dtext = ""; 
  312. for (int i = 0; i < str.Length; i++) 
  313. { 
  314. dtext = dtext + (char)(str[i] - 10 + 1 * 2); 
  315. } 
  316. return dtext; 
  317. } 
  318. #endregion 
  319. #region Url地址编码解码 
  320. /// <summary> 
  321. /// 编码Url地址 
  322. /// </summary> 
  323. /// <param name="url"></param> 
  324. /// <returns></returns> 
  325. public static string UrlEncode(string url) 
  326. { 
  327. byte[] mByte = null; 
  328. mByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(url); 
  329. return System.Web.HttpUtility.UrlEncode(mByte); 
  330. } 
  331. /// <summary> 
  332. /// 解码Url地址 
  333. /// </summary> 
  334. /// <param name="url"></param> 
  335. /// <returns></returns> 
  336. public static string UrlDecode(string url) 
  337. { 
  338. return HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding("GB2312")); 
  339. } 
  340. #endregion 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表