zoukankan      html  css  js  c++  java
  • 单点登陆

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Text;
    using System.IO;
    using System.Web.Security;
    using System.Security.Cryptography;
    using System.Web.Caching;
    
    using Newtonsoft.Json;
    
    using CN100.Member.IBLL.Modules;
    using CN100.EnterprisePlatform.Wcf.Core;
    using CN100.Member.IBLL;
    using CN100.EnterprisePlatform.Wcf.Core.Config;
    using CN100.ViewModel.Public;
    using CN100.Member.Enums;
    
    
    namespace CN100.Member.Permission
    {
        /// <summary>
        /// 
        /// </summary>
        public class CurrentUser
        {
            private static string CookieName = "_Customer_Cn100_COM";
            private static string MenuSessionName = "_SubAccountMenuUrls";
            private static string LoginTimeCookie = "_Cn100_LoginTimeCookie";
    
            const string cartCookieName = "_mCartCacheName";
            const string messageCookieName = "_mMessageCookieName";
    
            const string PassWordFile = "Key.ini";
            const string cacheId = "cachePassword";
            /// <summary>
            /// 
            /// </summary>
            public const string filePassword = "Cn100cOM";
            const string defualtPassword = "Cn100.Co";
            const string appLoginName = "LoginPassWord";
    
            const string UserDataExpireMinutes = "UserDataExpireMinutes";
    
    
            /// <summary>
            ///登陆过期时间
            /// </summary>
            private static int ExpireMinutes
            {
                get
                {
                    string strMin = System.Web.Configuration.WebConfigurationManager.AppSettings[UserDataExpireMinutes];
                    if (!string.IsNullOrEmpty(strMin))
                    {
                        int min = 0;
                        if (int.TryParse(strMin, out min))
                        {
                            return min;
                        }
                    }
    
                    return 30;
                }
            }
    
            /// <summary>
            /// 
            /// </summary>
            protected static string configPassword = GetRSAPassWord();
    
            private static string GetRSAPassWord()
            {
                try
                {
                    string strPwd = RSADecryption(System.Web.Configuration.WebConfigurationManager.AppSettings[appLoginName].ToString());
                    return strPwd;
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                }
                return "";
            }
    
            private static string GetPassWord()
            {
                string strPath = HttpContext.Current.Request.PhysicalApplicationPath + "/" + PassWordFile;
                object objPassword = WebCache.GetFromWebCache(cacheId);
                string strPassWord = "";
    
                if (objPassword != null)
                {
                    strPassWord = objPassword.ToString();
                }
                else
                {
                    if (File.Exists(strPath))
                    {
                        FileStream stream = new FileStream(strPath, FileMode.Open, FileAccess.Read);
                        StreamReader reader = new StreamReader(stream);
                        strPassWord = reader.ReadToEnd();
                        strPassWord = DecryptDES(strPassWord, filePassword);
                        stream.Close();
                        reader.Close();
    
                        //写入缓存
                        CacheDependency cacheDepen = new CacheDependency(strPath);
                        WebCache.WriteData(cacheId, cacheDepen, strPassWord);
                    }
                    else
                    {
                        FileStream stream = new FileStream(strPath, FileMode.CreateNew, FileAccess.Write);
                        strPassWord = EncryptDES(defualtPassword, filePassword);
                        byte[] btPass = Encoding.UTF8.GetBytes(strPassWord);
                        stream.Write(btPass, 0, btPass.Length);
                        stream.Close();
                        strPassWord = defualtPassword;
                    }
                }
    
                return strPassWord;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <returns></returns>
            public bool isLogin()
            {
                lock (@Lock)
                {
                    var cookie = CookieExt.GetCookie(CookieName);
                    if (cookie != null)
                    {
                        DateTime loginTime = GetLoginTime();
    
                        //延长cookie时间
                        // ExtendCookieTime(UserData);
                        if (loginTime.AddMinutes(ExpireMinutes) < DateTime.Now)
                        {
                            LogOut();
                            return false;
                        }
                        else
                        {
                            //延长登陆时间
                            ExtendCookieTime();
                        }
    
                        string UserData = CookieExt.GetCookieValueByName(CookieName);
    
                        if (!string.IsNullOrEmpty(UserData))
                        {
                            try
                            {
    
                                string decryptString = DecryptDES(UserData, configPassword);
                                var result = (LoginResult)JsonConvert.DeserializeObject(decryptString, typeof(LoginResult));
                                return true;
                            }
                            catch (Exception ex)
                            {
                                Log.WriteLog(ex);
                            }
                        }
                    }
                    return false;
                }
            }
    
            /// <summary>
            /// 是否登陆
            /// </summary>
            /// <returns></returns>
            public static bool IsLogin()
            {
                CurrentUser user = new CurrentUser();
                return user.isLogin();
                //return HttpContext.Current.User.Identity.IsAuthenticated;
            }
    
            /// <summary>
            /// 登出
            /// </summary>
            /// <returns></returns>
            public static bool LogOut()
            {
                try
                {
                    //System.Web.Security.FormsAuthentication.SignOut();
                    CookieExt.ClearCookie(CookieName);
                    CookieExt.ClearCookie(messageCookieName);
                    CookieExt.ClearCookie(cartCookieName);
    
                    //清除登陆时间
                    CookieExt.ClearCookie(LoginTimeCookie);
                    HttpContext.Current.Session.Remove(LoginTimeCookie);
                    //提现密码
                    CookieExt.ClearCookie("_CN100_DRACA_");
                    //提现错误次数
                    CookieExt.ClearCookie("_CN100_DRACOUNT_");
    
                    //移除子帐号菜单权限
                    if (HttpContext.Current.Session[MenuSessionName] != null)
                    {
                        HttpContext.Current.Session.Remove(MenuSessionName);
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 
            /// </summary>
            public static object @Lock = new object();
            /// <summary>
            /// 获取当前用户信息
            /// </summary>
            public static LoginResult UserInfo
            {
                get
                {
                    CurrentUser user = new CurrentUser();
                    return user.GetUserInfo();
                }
            }
    
            /// <summary>
            /// 获取用户信息
            /// </summary>
            /// <returns></returns>
            public LoginResult GetUserInfo()
            {
                lock (@Lock)
                {
                    LoginResult result = new LoginResult();
                    if (IsLogin())
                    {
                        string UserData = CookieExt.GetCookieValueByName(CookieName);
                        if (!string.IsNullOrEmpty(UserData))
                        {
                            try
                            {
                                string decryptString = DecryptDES(UserData, configPassword);
                                result = (LoginResult)JsonConvert.DeserializeObject(decryptString, typeof(LoginResult));
    
    
                                DateTime loginTime = GetLoginTime();
    
                                //延长cookie时间
                                // ExtendCookieTime(UserData);
                                if (loginTime.AddMinutes(ExpireMinutes) < DateTime.Now)
                                {
                                    LogOutToLoginPage();
                                    return new LoginResult();
                                }
                                else
                                {
                                    //延长登陆时间
                                    ExtendCookieTime();
                                }
                            }
                            catch (Exception ex)
                            {
                                Log.WriteLog(ex);
                                RedirectToLoginPage();
                            }
                        }
                    }
                    return result;
    
                }
            }
    
    
    
            /// <summary>
            /// 延长用户cookie时间
            /// </summary>
            public static void ExtendCookieTime()
            {
                //try
                //{
                //    if (HttpContext.Current.Session[LoginTimeCookie] != null)
                //    {
                //        DateTime time = Convert.ToDateTime(HttpContext.Current.Session[LoginTimeCookie]);
                //        if (time.AddMinutes(1) < DateTime.Now)
                //        {
                //            HttpContext.Current.Session[LoginTimeCookie] = DateTime.Now;
                //            CookieExt.SetCookie(LoginTimeCookie, DateTime.Now.ToString());
                //        }
                //    }
                //    else
                //    {
                //        HttpContext.Current.Session[LoginTimeCookie] = DateTime.Now;
                //        CookieExt.SetCookie(LoginTimeCookie, DateTime.Now.ToString());
                //    }
    
                //}
                //catch (Exception ex)
                //{
                //    Log.WriteLog(ex);
                //    CookieExt.SetCookie(LoginTimeCookie, DateTime.Now.ToString());
                //}
                CookieExt.SetCookie(LoginTimeCookie, DateTime.Now.ToString());
            }
    
            /// <summary>
            /// 获取上次登陆时间
            /// </summary>
            /// <returns></returns>
            private static DateTime GetLoginTime()
            {
                if (CookieExt.GetCookie(LoginTimeCookie) != null)
                {
                    DateTime loginTime = DateTime.Now;
                    if (DateTime.TryParse(CookieExt.GetCookieValueByName(LoginTimeCookie), out loginTime))
                    {
                        return loginTime;
                    }
                }
                return DateTime.Now;
            }
    
            /// <summary>
            /// 登出返回登陆页面
            /// </summary>
            public static void LogOutToLoginPage()
            {
                //System.Web.Security.FormsAuthentication.SignOut();
                LogOut();
                string url = GetReturnUrl();
                HttpContext.Current.Response.Redirect(FormsAuthentication.LoginUrl + "?ReturnUrl=" + url);
            }
    
            /// <summary>
            /// 登出并跳转到默认页面
            /// </summary>
            public static void LogOutToDefaultPage()
            {
                LogOut();
                HttpContext.Current.Response.Redirect(FormsAuthentication.DefaultUrl);
            }
    
            /// <summary>
            /// 转到登陆页面
            /// </summary>
            public static void RedirectToLoginPage()
            {
    
                string url = GetReturnUrl();
                HttpContext.Current.Response.Redirect(FormsAuthentication.LoginUrl + "?ReturnUrl=" + url);
            }
    
            /// <summary>
            /// 转到默认页面
            /// </summary>
            public static void RedirectToDefaultPage()
            {
                HttpContext.Current.Response.Redirect(FormsAuthentication.DefaultUrl);
            }
    
            /// <summary>
            /// 用户名,如果是子帐号登陆,用父帐户名
            /// </summary>
            public static string UserName
            {
                get
                {
                    if (IsLogin())
                    {
                        //return HttpContext.Current.User.Identity.Name;
                        return UserInfo.UserName;
                    }
                    return null;
                }
            }
    
            /// <summary>
            /// 保存用户信息到cookie
            /// </summary>
            /// <param name="result"></param>
            public static void SaveUserCookie(LoginResult result)
            {
                //string userData = JsonConvert.SerializeObject(result);
    
                //FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                //                                        result.UserName,
                //                                        DateTime.Now,
                //                                        DateTime.Now.AddMinutes(30), // value of time out property
                //                                        true, // Value of IsPersistent property
                //                                        userData,
                //                                        FormsAuthentication.FormsCookiePath);
                //string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                //HttpCookie authCookie = new HttpCookie(CookieName, encryptedTicket);
                //HttpCookie authCookie = new HttpCookie(CookieName, encryptedTicket);
                //authCookie.Domain = FormsAuthentication.CookieDomain;
                //authCookie.Path = FormsAuthentication.FormsCookiePath;
                //authCookie.Expires = DateTime.Now.AddMinutes(30);
                //HttpCookie authCookie = new HttpCookie(CookieName, encryptedTicket);
                //authCookie.Domain = FormsAuthentication.CookieDomain;
                //authCookie.Path = FormsAuthentication.FormsCookiePath;
                //authCookie.Expires = DateTime.Now.AddMinutes(30);
                //if (HttpContext.Current.Request.Cookies[CookieName] != null)
                //{
                //    HttpContext.Current.Response.Cookies.Set(authCookie);
                //}
                //else
                //{
                //    HttpContext.Current.Response.Cookies.Add(authCookie);
                //}
    
    
                result.LoginTime = DateTime.Now;
                string encryptedTicket = DeserializeUserData(result);
                CookieExt.SetCookie(CookieName, encryptedTicket); //, DateTime.Now.AddMinutes(ExpireMinutes)
    
                //清除购物与信息缓存
                CookieExt.ClearCookie(cartCookieName);
                CookieExt.ClearCookie(messageCookieName);
    
                //保存登陆时间
                ExtendCookieTime();
                //移除子帐号菜单权限
                if (HttpContext.Current.Session[MenuSessionName] != null)
                {
                    HttpContext.Current.Session.Remove(MenuSessionName);
                }
            }
    
            /// <summary>
            /// 序列化用户信息
            /// </summary>
            /// <param name="result"></param>
            /// <returns></returns>
            public static string DeserializeUserData(LoginResult result)
            {
                string userData = JsonConvert.SerializeObject(result);
                string encryptedTicket = EncryptDES(userData, configPassword);
                return encryptedTicket;
            }
    
            /// <summary>
            /// 获取当前用户信息
            /// </summary>
            /// <returns></returns>
            public static LoginResult GetCurrentUserInfo()
            {
                lock (@Lock)
                {
                    CurrentUser user = new CurrentUser();
                    return user.GetUserInfo();
                }
            }
    
            /// <summary>
            /// 获取
            /// </summary>
            /// <returns></returns>
            public static string GetReturnUrl()
            {
                string hosts = HttpContext.Current.Request.Headers["host"];
                if (string.IsNullOrEmpty(hosts))
                {
                    hosts = HttpContext.Current.Request.Url.Host;
                }
                string pageUrl = HttpContext.Current.Request.Url.PathAndQuery;
                return HttpUtility.UrlEncode("http://" + hosts + pageUrl);
            }
    
            /// <summary>
            /// 根据用户,判断是否具有菜单ID权限
            /// </summary>
            /// <param name="menuID"></param>
            /// <param name="subAccountID"></param>
            /// <returns></returns>
            public static bool HasMenuIDBySubAccountID(long menuID, long subAccountID)
            {
                try
                {
                    using (WcfTcpClient<IMemberUsers> client = WcfClients.Member.CreateClient<IMemberUsers>())
                    {
                        return client.Channel.HasMenuIDBySubAccountID(subAccountID, menuID);
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                    return false;
                }
            }
    
            /// <summary>
            /// 当前用户是否具有菜单权限
            /// </summary>
            /// <param name="menuID">菜单ID</param>
            /// <returns></returns>
            public static bool HasMenuID(long menuID)
            {
                if (UserInfo == null) return false;
                return HasMenuIDBySubAccountID(menuID, UserInfo.SubAccountID);
    
            }
    
            /// <summary>
            /// 根据用户名,获取有权限的菜单ID
            /// </summary>
            /// <param name="subAccountID">子帐号ID</param>
            /// <returns></returns>
            public static long[] GetMenuIDesBySubAccountID(long subAccountID)
            {
                try
                {
                    using (WcfTcpClient<IMemberUsers> client = WcfClients.Member.CreateClient<IMemberUsers>())
                    {
                        return client.Channel.GetMenuIDesBySubAccountID(subAccountID);
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                    return new long[] { };
                }
    
            }
    
            /// <summary>
            /// 获取当前用户有权限菜单ID
            /// </summary>
            /// <returns></returns>
            public static long[] GetMenuIDes()
            {
                if (UserInfo == null) return new long[] { };
    
                return GetMenuIDesBySubAccountID(UserInfo.SubAccountID);
            }
    
            private static IList<StoreMenuInfo> GetSubAccountMenu(long subAccount)
            {
                try
                {
                    using (WcfTcpClient<IMemberUsers> client = WcfClients.Member.CreateClient<IMemberUsers>())
                    {
                        IList<StoreMenuInfo> listMenu = client.Channel.GetStoreMenuBySubAccountID(subAccount);
                        string strCookie = JsonConvert.SerializeObject(listMenu);
                        //HttpContext.Current.Session.Add(MenuSessionName, listMenu);
                        return listMenu;
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                }
                return new List<StoreMenuInfo>();
            }
    
            /// <summary>
            /// 判断子帐号是否具有URL权限
            /// </summary>
            /// <param name="url"></param>
            /// <param name="subAccount"></param>
            /// <returns></returns>
            public static bool HasMenuOfSubAccount(string url, long subAccount)
            {
                //IList<StoreMenuInfo> listMenu = new List<StoreMenuInfo>();
                //if (HttpContext.Current.Session[MenuSessionName] != null)
                //{
                //    listMenu = HttpContext.Current.Session[MenuSessionName] as List<StoreMenuInfo>;
                //    if (listMenu == null)
                //    {
                //        listMenu = GetSubAccountMenu(subAccount);
                //    }
                //}
                //else
                //{
                //    listMenu = GetSubAccountMenu(subAccount);
                //}
    
                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@":d+", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    
                System.Text.RegularExpressions.Regex IPreg = new System.Text.RegularExpressions.Regex(@"(d{1,3}.){3}d{1,3}", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                if (IPreg.IsMatch(url))
                {
                    string hosts = HttpContext.Current.Request.Headers["host"];
                    if (string.IsNullOrEmpty(hosts))
                    {
                        hosts = HttpContext.Current.Request.Url.Host;
                    }
                    string pageUrl = HttpContext.Current.Request.Url.PathAndQuery;
                    url = "http://" + hosts + pageUrl;
                }
                else if (reg.IsMatch(url))
                {
                    url = reg.Replace(url, "");
                }
    
                
                IList<StoreMenuInfo> listMenu = GetSubAccountMenu(subAccount);
                if (listMenu.Count > 0)
                {
                    var instance = CN100.EnterprisePlatform.Configuration.DomainSection.Instance;
                    foreach (var menu in listMenu)
                    {
                        if (!string.IsNullOrEmpty(menu.DomainName))
                        {
                            if (instance.Urls[menu.DomainName] != null)
                            {
                                string menuUrl = instance.Urls[menu.DomainName].Url + menu.Url;
                                if (menuUrl.ToLower() == url.ToLower())
                                {
                                    return true;
                                }
                            }
                        }
    
                    }
                }
                Log.WriteLog(new Exception("子帐号来访地址:" + url.ToString()));
                return false;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public static bool HasMenuOfSubAccount(string url)
            {
                if (CurrentUser.IsLogin())
                {
                    long subAccountID = CurrentUser.UserInfo.SubAccountID;
                    if (subAccountID > 0)
                    {
                        return HasMenuOfSubAccount(url, subAccountID);
                    }
                }
                return false;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="userName"></param>
            /// <param name="userType"></param>
            /// <returns></returns>
            public static int GetMessageCountByUserName(string userName, UserType userType)
            {
                try
                {
                    using (WcfTcpClient<IUserMessageService> client = WcfClients.Member.CreateClient<IUserMessageService>())
                    {
                        return client.Channel.GetUnReadMessageCount(userName, userType);
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                }
                return 0;
            }
    
            /// <summary>
            /// 获取未读信息
            /// </summary>
            /// <returns></returns>
            public static int GetMessageCountByUserName()
            {
                if (IsLogin())
                {
                    return GetMessageCountByUserName(UserName, GetCurrentUserInfo().UserType);
                }
                return 0;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="UserID"></param>
            /// <returns></returns>
            public static IList<ShopCart> GetShopCartQtyByUserID(long UserID)
            {
                try
                {
                    using (WcfTcpClient<IMemberUsers> client = WcfClients.Member.CreateClient<IMemberUsers>())
                    {
                        return client.Channel.GetShopCartQtyByUserID(UserID);
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                }
                return new List<ShopCart>();
            }
    
            /// <summary>
            /// 获取购物车数量
            /// </summary>
            /// <returns></returns>
            public static IList<ShopCart> GetShopCartQtyByUserID()
            {
                if (IsLogin())
                {
                    return GetShopCartQtyByUserID(UserInfo.UserBaseID);
                }
                return new List<ShopCart>();
            }
    
    
            /// <summary>
            /// 申请店铺流程过程中直接录入地址时未满足条件url跳转
            /// </summary>
            public static void RedirectAlertPage()
            {
                //Response.Redirect(ConfigHelper.GetDomain("LoginURL") + "/AlertPage.aspx");
                HttpContext.Current.Response.Redirect(ConfigHelper.GetDomain("LoginURL") + "AlertPage.aspx");
            }
    
            #region 加密解密
            //默认密钥向量
            private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
            /**/
            /**/
            /**/
            private static DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    
            /// <summary>
            /// DES加密字符串
            /// </summary>
            /// <param name="encryptString">待加密的字符串</param>
            /// <param name="encryptKey">加密密钥,要求为8位</param>
            /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
            public static string EncryptDES(string encryptString, string encryptKey)
            {
                try
                {
                    //byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                    //byte[] rgbIV = Keys;
                    //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());
    
                    byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(encryptString);
                    des.Key = ASCIIEncoding.ASCII.GetBytes(encryptKey.Substring(0, 8));
                    des.IV = ASCIIEncoding.ASCII.GetBytes(encryptKey.Substring(0, 8));
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
    
                    StringBuilder ret = new StringBuilder();
                    foreach (byte b in ms.ToArray())
                    {
                        ret.AppendFormat("{0:X2}", b);
                    }
                    return ret.ToString();
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                    return encryptString;
                }
            }
    
            /**/
            /**/
            /**/
            /// <summary>
            /// DES解密字符串
            /// </summary>
            /// <param name="decryptString">待解密的字符串</param>
            /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
            /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
            public static string DecryptDES(string decryptString, string decryptKey)
            {
                try
                {
                    //byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));
                    //byte[] rgbIV = Keys;
                    //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());
                    byte[] inputByteArray = new byte[decryptString.Length / 2];
                    for (int x = 0; x < decryptString.Length / 2; x++)
                    {
                        int i = (Convert.ToInt32(decryptString.Substring(x * 2, 2), 16));
                        inputByteArray[x] = (byte)i;
                    }
                    des.Key = ASCIIEncoding.ASCII.GetBytes(decryptKey.Substring(0, 8));
                    des.IV = ASCIIEncoding.ASCII.GetBytes(decryptKey.Substring(0, 8));
                    MemoryStream ms = new MemoryStream();
                    CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    StringBuilder ret = new StringBuilder();
                    return System.Text.Encoding.UTF8.GetString(ms.ToArray());
                }
                catch (Exception ex)
                {
                    Log.WriteLog(ex);
                    return decryptString;
                }
            }
    
            /// <summary>
            /// RSA 的密钥产生 产生私钥 和公钥 
            /// </summary>
            /// <param name="xmlKeys"></param>
            /// <param name="xmlPublicKey"></param>
            public void RSAKey(out string xmlKeys, out string xmlPublicKey)
            {
                System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                xmlKeys = rsa.ToXmlString(true);
                xmlPublicKey = rsa.ToXmlString(false);
            }
    
            const string PUBLICKEY = "<RSAKeyValue><Modulus>1E1BqQ0uipllOGPMKB4YO/ZutHO0pfQz6jQKFs1y958Vm8YO77APoI65hFYZbFLer3MKx2Obp1Y0DyUyuNIes+IhS7I4nHBS4igdvhohUZDhLLphiuDZ3i5NkBQDVqex/UdTvLbzmVI29bThTEGyWzHYtrIjNqM+IJJnqOquXMs=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
            const string PRIVATEKEY = "<RSAKeyValue><Modulus>1E1BqQ0uipllOGPMKB4YO/ZutHO0pfQz6jQKFs1y958Vm8YO77APoI65hFYZbFLer3MKx2Obp1Y0DyUyuNIes+IhS7I4nHBS4igdvhohUZDhLLphiuDZ3i5NkBQDVqex/UdTvLbzmVI29bThTEGyWzHYtrIjNqM+IJJnqOquXMs=</Modulus><Exponent>AQAB</Exponent><P>8iXyePGppOkS1hnvMPC5FVfbSDMfSAPfsmXCX3LgoJYxt+n0p1Mm/ZyVnSHm8xJdObGznLRyrVZomuuk6DCyYw==</P><Q>4HI71hZ7VYSWT0ZTehNKvAlhxETWNQlD2YxRwvuHmcVI2+tN7m/RTLkspfXyKsd/opvcqnQeHv2m/LUtiUWEeQ==</Q><DP>UtLH7LY74DwYRUL5nTO5GqPCTR+vQ2KP0OUdZqhUTJkSyGUtWU4HuBcm1WgTJnDRkjpFxQOzdbZocRTIguKlIQ==</DP><DQ>0qJiBUiT9m23oi4dqTLxsAYd+lOfs6Y+RqupD5N+bpD3D2yEdn/5rEcb36Qw4HTZE4GyVUUj/3GMhRyC35CeAQ==</DQ><InverseQ>M1c29WqJO9ET8ymHaBq+Q5gRdpJ79jzV2RlydcMq0dCmHiHjeAwFilVj8AROjvuiOo71fUCleL9+leuOoKgUvg==</InverseQ><D>W14obQX0Ssf7rQoeOgHBskS7nkPRsj5n/VqKIQgoe3NmzFSv5u3hu9rQ8qhPZrQ/jEi5kdhHi/voicAblTkw5rcS7qfamv8NOLz6KV5HwUcyW0eAqL97w7LOJohw7S/3NGblftA76oHGpOpKpZf+u1g7e7w8xRS6RbZ3zqP6yzE=</D></RSAKeyValue>";
    
            /// 
            /// 加密
            /// 
            /// 待加密的字符串
            ///
            [ThreadStatic]
            private static RSACryptoServiceProvider rsa = null;
            [ThreadStatic]
            private static RSACryptoServiceProvider dersa = null;
            /// <summary>
            /// 
            /// </summary>
            /// <param name="word"></param>
            /// <returns></returns>
            public static string RSAEncryption(string word)
            {
                //CspParameters param = new CspParameters();
                //param.KeyContainerName = PUBLICKEY;
    
                if (rsa == null)
                {
                    rsa = new RSACryptoServiceProvider();
                    rsa.FromXmlString(PUBLICKEY);
                }
                byte[] plaindata = System.Text.Encoding.Default.GetBytes(word);
                byte[] encryptdata = rsa.Encrypt(plaindata, false);
                string encryptstring = Convert.ToBase64String(encryptdata);
                return encryptstring;
            }
    
    
            /// 
            /// 解密,当密文不正确时,可能会抛出异常
            /// 
            /// 待解密的密文字符串
            /// 
            public static string RSADecryption(string encryptWord)
            {
                //CspParameters param = new CspParameters();
                //param.KeyContainerName = PRIVATEKEY;
                if (dersa == null)
                {
                    rsa = new RSACryptoServiceProvider();
                    rsa.FromXmlString(PRIVATEKEY);
                }
    
    
                byte[] encryptdata = Convert.FromBase64String(encryptWord);
                byte[] decryptdata = rsa.Decrypt(encryptdata, false);
                string plaindata = System.Text.Encoding.Default.GetString(decryptdata);
                return plaindata;
    
            }
            #endregion
        }
    
        /// <summary>
        /// cookie操作
        /// </summary>
        public class CookieExt
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="name"></param>
            /// <param name="value"></param>
            /// <param name="expires"></param>
            public static void SetCookie(string name, string value, DateTime? expires = null)
            {
                HttpContext.Current.Response.Cookies.Remove(name);
                value = HttpUtility.UrlEncode(value);
                HttpCookie cookie = new HttpCookie(name, value);
                cookie.Domain = FormsAuthentication.CookieDomain;
                cookie.Path = FormsAuthentication.FormsCookiePath;
                if (expires != null)
                {
                    cookie.Expires = expires.Value;
                }
                HttpContext.Current.Response.Cookies.Add(cookie);
                //if (HttpContext.Current.Request.Cookies[name] != null)
                //{
                //    HttpContext.Current.Response.Cookies.Set(cookie);
                //}
                //else
                //{
                //    HttpContext.Current.Response.Cookies.Add(cookie);
                //}
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public static string GetCookieValueByName(string name)
            {
                string value = HttpContext.Current.Request.Cookies[name].Value;
                value = HttpUtility.UrlDecode(value);
                return value;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="name"></param>
            /// <returns></returns>
            public static HttpCookie GetCookie(string name)
            {
                return HttpContext.Current.Request.Cookies[name];
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="name"></param>
            public static void ClearCookie(string name)
            {
                //if (GetCookie(name) != null)
                //{
    
                //    HttpCookie cookie = GetCookie(name);
                //    cookie.Expires = DateTime.Now.AddDays(-1);
    
                //    HttpContext.Current.Response.Cookies.Set(cookie);
                //}
                HttpCookie cookie = new HttpCookie(name);
                cookie.Expires = DateTime.Now.AddDays(-1);
                cookie.Path = "/";
                cookie.Domain = FormsAuthentication.CookieDomain;
                HttpContext.Current.Response.Cookies.Add(cookie);
            }
    
    
        }
    
    }

    需要整理,我只是开发的原稿弄出来了!有很多没用的!

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3174320.html
Copyright © 2011-2022 走看看