字符串常用的加密有三种
1,MD5 加密, 这个常用于密码, 单向加密, 不可解密, 有些在线解密的可以解大部份, 用代码不能实现, 如果不想让人解密, 加密后随便截取一段就好了;
2,Base64 位加密, 通常加密后字符串尾会有两个 == , 可解密;
3,SHA 加密, 单向加密, 安全性没 MD5 好.
以上不可解密都是相对的, 这些加密算法都是跨平台的.
- using System.web.Security;
- using System.Security.Cryptography;
- /// <summary>
- /// MD5 函数
- /// </summary>
- /// <param name="val"> 原始字符串 </param>
- /// <returns>MD5 结果 </returns>
- public static string MD5String(string val)
- {
- if (val.Trim().Equals(String.Empty) == true)
- return String.Empty;
- byte[] b = Encoding.UTF8.GetBytes(val);
- b = new MD5CryptoServiceProvider().ComputeHash(b);
- string ret = String.Empty;
- for (int i = 0; i <b.Length; i++)
- ret += b[i].ToString("x").PadLeft(2, '0');
- return ret;
- }
- /// <summary>
- /// SHA1 字符串加密
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static string SHA1(string obj)
- {
- return FormsAuthentication.HashPasswordForStoringInConfigFile(obj, "SHA1");
- }
- /// <summary>
- /// SHA256 字符串加密
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public static string SHA256(string obj)
- {
- //return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(obj, "SHA256");
- byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(obj);
- SHA256 sha256 = new SHA256Managed();
- byte[] retVal = sha256.ComputeHash(bytValue);
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i <retVal.Length; i++)
- {
- sb.Append(retVal[i].ToString("x2"));
- }
- return sb.ToString();
- }
- /// <summary>
- /// Base64 位加密
- /// </summary>
- /// <param name="val"></param>
- /// <returns></returns>
- public static string EncryptBase64(string val)
- {
- return Convert.ToBase64String(Encoding.UTF8.GetBytes(val));
- }
- /// <summary>
- /// Base64 位解密
- /// </summary>
- /// <param name="val"></param>
- /// <returns></returns>
- public static string DecryptBase64(string val)
- {
- return Encoding.Default.GetString(Convert.FromBase64String(val));
- }
- /// <summary>
- /// BASE64 位 (MD5 加密)[标准, 非 MD5 加密再 BASE64 位加密]
- /// </summary>
- /// <param name="val"> 原始字符串 </param>
- /// <returns>MD5 结果 </returns>
- public static string EncryptBase64AndMD5(string val)
- {
- if (val.Trim().Equals(String.Empty) == true)
- return String.Empty;
- MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
- return Convert.ToBase64String(MD5CSP.ComputeHash(Encoding.UTF8.GetBytes(val)));
- }
也可以定义一个 KEY, 自定义加密算法
- /// <summary>
- /// DES 加密字符串
- /// </summary>
- /// <param name="encryptString"> 待加密的字符串 </param>
- /// <param name="encryptKey"> 加密密钥, 要求为 8 位 </param>
- /// <returns > 加密成功返回加密后的字符串, 失败返回源串 </returns>
- public static string Encode(string encryptString, string encryptKey)
- {
- encryptKey = UtilsString.SubString(encryptKey, 8);
- encryptKey = encryptKey.PadRight(8, ' ');
- byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
- byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
- byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
- DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
- MemoryStream mStream = new MemoryStream();
- CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Convert.ToBase64String(mStream.ToArray());
- }
- /// <summary>
- /// DES 解密字符串
- /// </summary>
- /// <param name="decryptString"> 待解密的字符串 </param>
- /// <param name="decryptKey"> 解密密钥, 要求为 8 位, 和加密密钥相同 </param>
- /// <returns > 解密成功返回解密后的字符串, 失败返源串 </returns>
- public static string Decode(string decryptString, string decryptKey)
- {
- decryptKey = UtilsString.SubString(decryptKey, 8);
- decryptKey = decryptKey.PadRight(8, ' ');
- byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
- byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
- byte[] inputByteArray = Convert.FromBase64String(decryptString);
- DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
- MemoryStream mStream = new MemoryStream();
- CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
- cStream.Write(inputByteArray, 0, inputByteArray.Length);
- cStream.FlushFinalBlock();
- return Encoding.UTF8.GetString(mStream.ToArray());
- }
来源: http://www.bubuko.com/infodetail-2638879.html