using System; using System.Text; using System.IO; using System.Web.UI; using System.Web.Security; using System.Globalization; using System.Security.Cryptography;
namespace Baolee.GeneralMethod { /// <summary> /// Encrypt 的摘要说明。 /// </summary> public class Encrypt { /// <summary> /// 构造函数 /// </summary> public Encrypt(Page mPage) { // // TODO: 在此处添加构造函数逻辑 // } private static string ByteToString(byte[] b) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < b.Length; i++) { builder.AppendFormat("{0:X2}", b[i]); } return builder.ToString(); } /// <summary> /// if don't input key , Use default key /// </summary> /// <param name="str">Desc string </param> /// <returns></returns> public static string Decode(string str) { return Decode(str, "Rainight"); } /// <summary> /// Des 解密 GB2312 /// </summary> /// <param name="str">Desc string</param> /// <param name="key">Key ,必须为8位 </param> /// <returns></returns> public static string Decode(string str, string key) { DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8)); provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8)); byte[] buffer = new byte[str.Length / 2]; for (int i = 0; i < (str.Length / 2); i++) { int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10); buffer[i] = (byte) num2; } MemoryStream stream = new MemoryStream(); CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write); stream2.Write(buffer, 0, buffer.Length); stream2.FlushFinalBlock(); stream.Close(); return Encoding.GetEncoding("GB2312").GetString(stream.ToArray()); } /// <summary> /// Des 解密字符串 UTF8 /// </summary> /// <param name="sInputString">sInputString</param> /// <param name="sKey">sKey</param> /// <returns></returns> public string DecryptString(string sInputString, string sKey) { string[] textArray = sInputString.Split("-".ToCharArray()); byte[] inputBuffer = new byte[textArray.Length]; for (int i = 0; i < textArray.Length; i++) { inputBuffer[i] = byte.Parse(textArray[i], NumberStyles.HexNumber); } DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Key = Encoding.ASCII.GetBytes(sKey); provider.IV = Encoding.ASCII.GetBytes(sKey); byte[] bytes = provider.CreateDecryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length); return Encoding.UTF8.GetString(bytes); } /// <summary> /// If don't input key , Use default key /// </summary> /// <param name="str"></param> /// <returns></returns> public static string Encode(string str) { return Encode(str, "Rainight"); } /// <summary> /// Des 加密 GB2312 /// </summary> /// <param name="str"></param> /// <param name="key"></param> /// <returns></returns> public static string Encode(string str, string key) { DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, 8)); provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, 8)); byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(str); MemoryStream stream = new MemoryStream(); CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write); stream2.Write(bytes, 0, bytes.Length); stream2.FlushFinalBlock(); StringBuilder builder = new StringBuilder(); foreach (byte num in stream.ToArray()) { builder.AppendFormat("{0:X2}", num); } stream.Close(); return builder.ToString(); } /// <summary> /// Des 加密 ,可以处理汉字 UTF8 /// </summary> /// <param name="sInputString"></param> /// <param name="sKey"></param> /// <returns></returns> public string EncryptString(string sInputString, string sKey) { byte[] inputBuffer = Encoding.UTF8.GetBytes(sInputString); DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); provider.Key = Encoding.ASCII.GetBytes(sKey); provider.IV = Encoding.ASCII.GetBytes(sKey); return BitConverter.ToString(provider.CreateEncryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length)); } /// <summary> /// Base64字符串解码 /// </summary> /// <param name="str">Base64编码的字符串</param> /// <returns>字符串</returns> public static string FromBase64(string str) { try { byte[] bytes = Convert.FromBase64String(str); str = Encoding.Default.GetString(bytes); } catch (Exception) { } return str; } /// <summary> /// /// </summary> /// <param name="str">要加密的字串,default use MD5 encrypt </param> /// <returns></returns> public static string MD5Encrypt(string str) { return MD5Encrypt(str, "MD5"); }
/// <summary> /// /// </summary> /// <param name="str">要加密的字串 </param> /// <param name="StrFormate">type of MD5 or SHA1 </param> /// <returns></returns> public static string MD5Encrypt(string str, string StrFormate) { if (StrFormate.ToUpper() == "SHA1") { return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "SHA1"); } if (StrFormate.ToUpper() == "MD5") { return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5"); } return ""; } /// <summary> /// PB 的解码 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string PBDecode(string str) { return PBDecode(str, "boalee"); } /// <summary> /// PB的解码 /// </summary> /// <param name="str"></param> /// <param name="key"></param> /// <returns></returns> public static string PBDecode(string str, string key) { string text = ""; int length = key.Length; for (int i = 0; i < str.Length; i++) { int num3 = (i + 1) % length; if (num3 == 0) { num3 = length; } int num = str[i] - key[num3 - 1]; if (num < 0) { num += 0xff; } text = text + num.ToString(); } return text; } /// <summary> /// PB 的编码 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string PBEncode(string str) { return PBEncode(str, "boalee"); } /// <summary> /// PB 的编码 /// </summary> /// <param name="str"></param> /// <param name="key"></param> /// <returns></returns> public static string PBEncode(string str, string key) { string text = ""; int length = key.Length; for (int i = 0; i < str.Length; i++) { int num3 = (i + 1) % length; if (num3 == 0) { num3 = length; } int num = str[i] + key[num3 - 1]; if (num > 0xff) { num -= 0xff; } text = text + num.ToString(); } return text; } /// <summary> /// 字符串编码为Base64 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string ToBase64(string str) { try { str = Convert.ToBase64String(Encoding.Default.GetBytes(str.ToCharArray())); } catch (Exception) { } return str; } } }
|