亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? securityhelper.cs

?? 基于Asp.net、MS sql sever 2000、C# 論壇系統源碼
?? CS
字號:
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Security.Cryptography;

namespace Stella.Utility
{
	/// <summary>
	/// 執行安全操作的輔助類
	/// </summary>
	/// <remarks>
	/// 數據庫連接字符串的操作來自pethshop3
	/// </remarks>
	public abstract class SecurityHelper
	{
		private SecurityHelper(){}
		
		#region 數據庫連接字符串的操作
		/// <summary>
		/// 解密數據庫連接字符串
		/// </summary>
		/// <param name="InputConnectionString">加密后的數據庫連接字符串</param>
		/// <returns>解密后的數據庫連接字符串</returns>
		/// <remarks>
		/// 來自pethsop3
		/// </remarks>
		public static string DecryptDBConnectionString(string InputConnectionString)
		{

			// If the variable is blank, return the input
			if(InputConnectionString.Equals(string.Empty))
			{
				return InputConnectionString;
			}

			// Create an instance of the encryption API
			// We assume the key has been encrypted on this machine and not by a user
			DataProtector dp = new DataProtector(Store.Machine);

			// Use the API to decrypt the connection string
			// API works with bytes so we need to convert to and from byte arrays
			byte[] decryptedData = dp.Decrypt( Convert.FromBase64String( InputConnectionString ), null );
			
			// Return the decyrpted data to the string
			return Encoding.ASCII.GetString( decryptedData );
		}

		/// <summary>
		/// 加密數據庫連接字符串
		/// </summary>
		/// <param name="encryptedString">未加密的數據庫連接字符串</param>
		/// <returns>加密后數據庫連接字符串</returns>
		/// <remarks>
		/// 來自pethsop3
		/// </remarks>
		public static string EncryptDBConnectionString(string encryptedString)
		{

			// Create an instance of the encryption API
			// We assume the key has been encrypted on this machine and not by a user
			DataProtector dp = new DataProtector(Store.Machine);

			// Use the API to encrypt the connection string
			// API works with bytes so we need to convert to and from byte arrays
			byte[] dataBytes = Encoding.ASCII.GetBytes( encryptedString );
			byte[] encryptedBytes = dp.Encrypt( dataBytes, null );

			// Return the encyrpted data to the string
			return Convert.ToBase64String( encryptedBytes );
		}

		#endregion
  
        #region 加密用戶輸入的密碼

		private static int saltLen=ConfigHelper.SaltLength;
		
		/// <summary>
		/// 加密用戶輸入的密碼
		/// </summary>
		/// <param name="input">用戶輸入的密碼</param>
		/// <returns>加密后的密碼</returns>
		public static byte[] EncryptPassword(string input)
		{
			byte[] sha1Pwd;
			SHA1 sha1=SHA1.Create();
			sha1Pwd=sha1.ComputeHash(Encoding.Unicode.GetBytes(input));
			sha1.Clear();
			//創造鹽值
			RNGCryptoServiceProvider rng=new RNGCryptoServiceProvider();
			byte[] salt=new byte[saltLen];
			rng.GetBytes(salt);

			return saltedDBPassword(sha1Pwd,salt);
		}

		/// <summary>
		/// 加密用戶輸入的密碼
		/// </summary>
		/// <param name="input">用戶輸入的密碼</param>
		/// <param name="salt">鹽值</param>
		/// <returns>加密后的密碼</returns>
		public static byte[] EncryptPassword(string input,byte[] salt)
		{
			byte[] sha1Pwd;
			SHA1 sha1=SHA1.Create();
			sha1Pwd=sha1.ComputeHash(Encoding.Unicode.GetBytes(input));
			sha1.Clear();

			return saltedDBPassword(sha1Pwd,salt);
		}

		private static byte[] saltedDBPassword(byte[] sha1Pwd,byte[] salt)
		{
			System.Diagnostics.Debug.Fail(Convert.ToBase64String(salt));
			//將密碼和鹽值聯合在一起
			int len=sha1Pwd.Length;
			byte[] plusPwd=new byte[len+saltLen];
			sha1Pwd.CopyTo(plusPwd,0);
			salt.CopyTo(plusPwd,len);

			//加密加入鹽值的密碼
			SHA1 sha1=SHA1.Create();
			byte[] saltedPwd=sha1.ComputeHash(plusPwd);
			sha1.Clear();

			//將鹽值和密碼一起存儲到數據庫
			int len2=saltedPwd.Length;
			byte[] DBPwd=new byte[len2+saltLen];
			saltedPwd.CopyTo(DBPwd,0);
			salt.CopyTo(DBPwd,len2);

			return DBPwd;
		}

		#endregion

		#region 隨機密碼生成

		/// <summary>
		/// 隨機密碼生成
		/// </summary>
		/// <param name="pwdchars">生成的隨機密碼串可以使用哪些字符</param>
		/// <param name="pwdlen">生成的隨機密碼串的長度</param>
		/// <returns>隨機明文密碼</returns>
		public static string MakeLightPassword(string pwdchars, int pwdlen)
		{
			//通過調用 Random 類的 Next() 方法
			//先獲得一個大于或等于 0 而小于 pwdchars 長度的整數
			//以該數作為索引值,從可用字符串中隨機取字符
			//以指定的密碼長度為循環次數,依次連接取得的字符
			//最后即得到所需的隨機密碼串了。
			StringBuilder tmpstr =new StringBuilder();
			int iRandNum;
			Random rnd = new Random();
			for(int i=0;i<pwdlen;i++)
			{
				iRandNum = rnd.Next(pwdchars.Length);
				//tmpstr += pwdchars[iRandNum];
				tmpstr.Append(pwdchars[iRandNum]);
			}
			return tmpstr.ToString();
		}

		#endregion

		/// <summary>
		/// 比較兩個字節數組
		/// </summary>
		/// <param name="array1">數組1</param>
		/// <param name="array2">數組2</param>
		/// <returns>是否相等</returns>
		public static bool CompareByteArray(byte[] array1, byte[] array2)
		{
			System.Diagnostics.Debug.Fail(Convert.ToBase64String(array1),Convert.ToBase64String(array2));

			if (array1.Length != array2.Length)
				return false;

			for (int i = 0; i < array1.Length; i++)
			{
				if (array1[i] != array2[i])
					return false;
			}
			return true;
		}

		/// <summary>
		/// 從加密的字節數組中得到鹽值
		/// </summary>
		/// <param name="DBPassword">加密的字節數組</param>
		/// <returns>鹽值</returns>
		public static byte[] GetSalt(byte[] DBPassword)
		{
			int len=ConfigHelper.SaltLength;
			int len2=DBPassword.Length-len;
			byte[] salt=new byte[len];
			for(int i=0;i<len;i++)
			{
				salt[i]=DBPassword[len2+i];
			}

			return salt;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类春色校园小说| 99久久伊人网影院| 成人av综合在线| 欧美日韩第一区日日骚| 中文字幕一区二区视频| 免费一区二区视频| 在线观看成人小视频| 久久一区二区三区国产精品| 亚洲国产欧美在线人成| 成人动漫在线一区| 久久综合色婷婷| 久久综合综合久久综合| 欧美色手机在线观看| 亚洲视频免费看| 成人免费黄色在线| 国产午夜精品一区二区三区四区| 日本在线不卡视频一二三区| 欧美综合一区二区三区| 日韩久久一区二区| 91丨porny丨户外露出| 国产欧美日韩在线| 高清久久久久久| 久久久www成人免费毛片麻豆| 日本一道高清亚洲日美韩| 欧美日韩精品免费| 亚洲成av人片一区二区三区| 欧美专区亚洲专区| 亚洲国产wwwccc36天堂| 日本高清免费不卡视频| 亚洲一区二区在线免费看| 在线免费av一区| 亚洲国产一区视频| 欧美肥妇毛茸茸| 免费观看在线综合色| 欧美精品1区2区3区| 日本网站在线观看一区二区三区| 制服视频三区第一页精品| 免费视频一区二区| 亚洲精品在线观看网站| 国产伦精品一区二区三区免费迷| 精品福利视频一区二区三区| 国产九色精品成人porny | a级精品国产片在线观看| 国产精品久久看| 色系网站成人免费| 午夜精品免费在线观看| 日韩午夜在线播放| 国产美女精品在线| 国产精品久久毛片a| 欧美在线不卡一区| 日韩电影一区二区三区| 久久亚洲一区二区三区四区| 国产69精品久久久久毛片| 自拍偷拍欧美激情| 欧美一级免费观看| 国产成人亚洲精品青草天美| 亚洲婷婷综合久久一本伊一区| 色综合天天综合网国产成人综合天| 午夜av区久久| 亚洲国产精品成人综合色在线婷婷| 91亚洲国产成人精品一区二区三| 亚洲一区精品在线| 精品国产网站在线观看| www.66久久| 日本欧美加勒比视频| 欧美激情综合五月色丁香小说| 色综合一个色综合| 久久国产视频网| 又紧又大又爽精品一区二区| 日韩精品一区国产麻豆| 91视频91自| 狠狠狠色丁香婷婷综合久久五月| 亚洲日本青草视频在线怡红院| 欧美电影免费观看高清完整版在线观看| 成人午夜av电影| 热久久国产精品| 一区二区三区中文字幕电影| 久久久久久亚洲综合| 欧美日韩免费视频| av在线综合网| 国产另类ts人妖一区二区| 日日摸夜夜添夜夜添精品视频| 国产精品人妖ts系列视频| 日韩一级免费一区| 欧美性大战xxxxx久久久| 成人性视频免费网站| 另类综合日韩欧美亚洲| 婷婷亚洲久悠悠色悠在线播放| 国产精品二区一区二区aⅴ污介绍| 日韩三级精品电影久久久| 欧美在线综合视频| av在线这里只有精品| 狠狠色丁香九九婷婷综合五月 | 中文字幕在线一区免费| 精品粉嫩超白一线天av| 91精品国产综合久久福利| 日本高清成人免费播放| 成人毛片老司机大片| 国模套图日韩精品一区二区| 日韩国产欧美一区二区三区| 午夜亚洲国产au精品一区二区| 亚洲欧洲一区二区在线播放| 国产欧美一区二区三区沐欲| 337p日本欧洲亚洲大胆色噜噜| 欧美一区二区三区系列电影| 欧美日韩亚洲综合在线| 在线观看成人小视频| 日本黄色一区二区| 在线免费观看一区| 欧美优质美女网站| 欧洲av一区二区嗯嗯嗯啊| 色噜噜夜夜夜综合网| 色欧美日韩亚洲| 欧美午夜精品久久久久久超碰| 91久久人澡人人添人人爽欧美| 99久久99久久久精品齐齐| 91麻豆国产福利精品| 色拍拍在线精品视频8848| 色婷婷激情久久| 精品视频在线免费| 欧美一级二级三级乱码| 欧美成人福利视频| 久久精品一区八戒影视| 国产精品蜜臀在线观看| 亚洲男人电影天堂| 亚洲午夜久久久久久久久电影网 | 国产一区三区三区| 国产精品911| 91一区二区在线| 精品视频一区二区不卡| 日韩欧美色电影| 国产日韩视频一区二区三区| 国产精品久久久久久一区二区三区 | 免费成人av在线| 国产一区二区成人久久免费影院 | 精品一区二区三区日韩| 丰满少妇久久久久久久| 91天堂素人约啪| 欧美日韩五月天| 久久综合色综合88| 亚洲精品免费视频| 日本欧美一区二区| 成人高清视频在线| 在线成人av影院| 久久精品亚洲国产奇米99| 亚洲三级电影网站| 麻豆国产欧美日韩综合精品二区 | av午夜一区麻豆| 884aa四虎影成人精品一区| 欧美精品一区男女天堂| 亚洲嫩草精品久久| 加勒比av一区二区| 在线视频一区二区免费| 久久久99精品免费观看不卡| 一区二区三区日韩欧美| 黄页视频在线91| 欧美日韩在线播放三区| 国产日韩欧美精品在线| 亚洲电影视频在线| 成人性生交大片免费看视频在线| 欧美色区777第一页| 国产精品欧美综合在线| 蜜臀av性久久久久蜜臀av麻豆| 9i在线看片成人免费| 精品国产一区二区三区av性色| 亚洲综合精品自拍| 成人午夜电影小说| 精品美女在线播放| 亚洲成人中文在线| av在线一区二区| 国产视频一区二区三区在线观看| 亚洲成人7777| 在线欧美日韩国产| 亚洲男同性视频| 成人免费视频免费观看| 久久久亚洲午夜电影| 婷婷六月综合网| 91成人看片片| 国产精品成人午夜| 国产sm精品调教视频网站| 欧美不卡一二三| 日本中文一区二区三区| 欧美理论片在线| 亚洲福利电影网| 欧美影片第一页| 亚洲精品欧美在线| 一本久道中文字幕精品亚洲嫩| 国产精品午夜电影| 粉嫩av亚洲一区二区图片| 久久品道一品道久久精品| 九色porny丨国产精品| 欧美一级xxx| 奇米影视一区二区三区小说| 7777精品伊人久久久大香线蕉超级流畅 | 欧美三级视频在线播放| 一区二区三区在线视频播放| 91色乱码一区二区三区| 亚洲日本va在线观看| 99久久精品免费看国产免费软件| 欧美国产一区二区在线观看|