亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET MVC結合JavaScript登錄、校驗和加密

2024-07-10 13:31:16
字體:
來源:轉載
供稿:網友

最近閑來無事給自己寫了家庭財務收支管理系統,也就包含支出管理,收入管理和一些統計功能。

先說登錄模塊,因為涉及GET和POST請求,這些東西都是能被監控和抓取的所以就考慮這使用RSA加密解密方式傳輸用戶名和密碼參數,頁面JS如下: 

/*需要引入三個JS文件,BigInt.js、RSA.js和Barrett.js,用到cookie則需要引入jquery.cookie.js文件*///與后臺交互獲取公鑰function getPublicKey() {  var pubKey = '';  if ($.cookie('publicKey') == null) {    $.ajax({      url: "/Account/GetRsaPublicKey",      type: "get",      contentType: "application/x-www-form-urlencoded; charset=utf-8",      async: false,      data: {},      dataType: "json",      success: function (data) {        if (data.Code == 0) {          pubKey = data.RsaPublicKey + "," + data.Key;          $.cookie('publicKey', pubKey, { expires: 1 / 1440 });        } else {          Config.Method.JudgeCode(data, 1);        }      }    });  } else {    pubKey = $.cookie('publicKey');  }  return pubKey;}//公鑰加密用戶密碼Pwd為RSA加密后參數function rsaEncrypt(pwd) {  var publicKey = getPublicKey();  setMaxDigits(129);  var rsaKey = new RSAKeyPair(publicKey.split(",")[0], "", publicKey.split(",")[1]);  var pwdRtn = encryptedString(rsaKey, pwd);  return pwdRtn + "," + publicKey.split(",")[2];}//POST登錄請求,參數<script type="text/javascript">  $(function () {    $('#btnSubmit').live('click', function () {      var uName = $('#u').val();      var pwd = $('#p').val();      if (uName == '') {        alert('用戶名不能為空');        return;      }      if (pwd == '') {        alert('用戶密碼不能為空');        return;      }      var enPwd = rsaEncrypt(pwd);      $.ajax({        type: "POST",        url: "/Account/UserLogin",        data: { 'UserName': uName, 'Pwd': enPwd.split(",")[0], 'Key': enPwd.split(",")[1], 'RUrl': $('#hiddenUrl').val() },        contentType: "application/x-www-form-urlencoded; charset=utf-8",        async: false,        dataType: "json",        success: function (data) {          if (data.result == true) {            window.location.href = data.url;            return false;          } else {            $('#msg').text(data.message);          }        },        error: function (XMLHttpRequest, textStatus, errorThrown) {          $('#msg').text(XMLHttpRequest.status + '||' + XMLHttpRequest.readyState + '||' + textStatus);        }      });    });  })</script>

前臺加密完成后就需要后臺做解密處理,解密完成后需要使用MD5加密現有密碼與數據庫中用戶密碼進行比較驗證,如果驗證通過則需要寫入cookie以便下次用戶能自   動登錄,由于cookie中我不希望用戶名和密碼都明碼存儲,我這里用到了AES加密的方式,自定義一個32位的加密密鑰對cookie進行加密解密處理,后臺c#代碼如  下: 

[HttpPost]    public JsonResult UserLogin(string UserName, string Pwd, string Key, string RUrl)    {      string privateKey = Common.CacheGet(Key) as string;      if (!string.IsNullOrEmpty(privateKey))      {        if (string.IsNullOrEmpty(UserName))        {          return Json(new { result = false, message = "用戶名為空" }, JsonRequestBehavior.AllowGet);        }        if (string.IsNullOrEmpty(Pwd))        {          return Json(new { result = false, message = "用戶密碼為空" }, JsonRequestBehavior.AllowGet);        }        string pwd = Common.DecryptRSA(Pwd, privateKey);//私鑰解密        string md5Pwd = Common.NoneEncrypt(Common.NoneEncrypt(Common.NoneEncrypt(pwd, 1), 1), 1);//將解密后的值md5加密3次        AccountUnserInfo userInfo = bll.GetUserInfo(UserName.Trim(), md5Pwd);        if (userInfo != null && userInfo.U_Id > 0)//用戶信息存在        {          //用戶名、密碼放入cookie          HttpCookie cookie = new HttpCookie("fw_izz");          //AES加密Cookie          cookie["u_name"] = AesEncryptHelper.EncryptAes(UserName);          cookie["u_pwd"] = AesEncryptHelper.EncryptAes(pwd);          cookie.Expires = DateTime.Now.AddDays(7);          Response.Cookies.Add(cookie);          if (!string.IsNullOrEmpty(RUrl))//接收隱藏域中的值          {            return Json(new { result = true, message = "成功", url = RUrl });          }          else          {            return Json(new { result = true, message = "成功", url = "/AccountDetail/Index" });          }        }        else        {          return Json(new { result = false, message = "用戶信息不存在", url = "/Account/Index" });        }      }      else      {        return Json(new { result = false, message = "非法秘鑰", url = "/Account/Index" });      }    }

各種加密解密方法、Cache操作以及cookie操作代碼如下:  

public class Common  {    /// <summary>    /// 產生一組RSA公鑰、私鑰    /// </summary>    /// <returns></returns>    public static Dictionary<string, string> CreateRsaKeyPair()    {      var keyPair = new Dictionary<string, string>();      var rsaProvider = new RSACryptoServiceProvider(1024);      RSAParameters parameter = rsaProvider.ExportParameters(true);      keyPair.Add("PUBLIC", BytesToHexString(parameter.Exponent) + "," + BytesToHexString(parameter.Modulus));      keyPair.Add("PRIVATE", rsaProvider.ToXmlString(true));      return keyPair;    }    /// <summary>    /// RSA解密字符串    /// </summary>    /// <param name="encryptData">密文</param>    /// <param name="privateKey">私鑰</param>    /// <returns>明文</returns>    public static string DecryptRSA(string encryptData, string privateKey)    {      string decryptData = "";      try      {        var provider = new RSACryptoServiceProvider();        provider.FromXmlString(privateKey);        byte[] result = provider.Decrypt(HexStringToBytes(encryptData), false);        ASCIIEncoding enc = new ASCIIEncoding();        decryptData = enc.GetString(result);      }      catch (Exception e)      {        throw new Exception("RSA解密出錯!", e);      }      return decryptData;    }    private static string BytesToHexString(byte[] input)    {      StringBuilder hexString = new StringBuilder(64);      for (int i = 0; i < input.Length; i++)      {        hexString.Append(String.Format("{0:X2}", input[i]));      }      return hexString.ToString();    }    public static byte[] HexStringToBytes(string hex)    {      if (hex.Length == 0)      {        return new byte[] { 0 };      }      if (hex.Length % 2 == 1)      {        hex = "0" + hex;      }      byte[] result = new byte[hex.Length / 2];      for (int i = 0; i < hex.Length / 2; i++)      {        result[i] = byte.Parse(hex.Substring(2 * i, 2), System.Globalization.NumberStyles.AllowHexSpecifier);      }      return result;    }    private static ObjectCache Cache    {      get { return MemoryCache.Default; }    }    /// <summary>    /// 獲取緩存    /// </summary>    /// <param name="key"></param>    /// <returns></returns>    public static object CacheGet(string key)    {      return Cache[key];    }    /// <summary>    /// 設置緩存    /// </summary>    /// <param name="key"></param>    /// <param name="data"></param>    /// <param name="cacheTime"></param>    public static void CacheSet(string key, object data, int cacheTime)    {      CacheItemPolicy policy = new CacheItemPolicy();      policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime);      Cache.Add(new CacheItem(key, data), policy);    }    /// <summary>    /// 判斷緩存是否存在    /// </summary>    /// <param name="key"></param>    /// <returns></returns>    public static bool IsSet(string key)    {      return (Cache[key] != null);    }    /// <summary>    /// 緩存失效    /// </summary>    /// <param name="key"></param>    public static void CacheRemove(string key)    {      Cache.Remove(key);    }    /// <summary>    /// 對字符串進行加密(不可逆)    /// </summary>    /// <param name="Password">要加密的字符串</param>    /// <param name="Format">加密方式,0 is SHA1,1 is MD5</param>    /// <returns></returns>    public static string NoneEncrypt(string Password, int Format)    {      string strResult = "";      switch (Format)      {        case 0:          strResult = FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "SHA1");          break;        case 1:          strResult = FormsAuthentication.HashPasswordForStoringInConfigFile(Password, "MD5");          break;        default:          strResult = Password;          break;      }      return strResult;    }  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人中文字幕| 黄色成人av在线| 国产免费一区视频观看免费| 国产精品日韩欧美| 亚洲色图色老头| 国产色婷婷国产综合在线理论片a| 国产视频精品va久久久久久| 日韩中文字幕在线播放| 欧美成年人视频| 91在线视频免费| 欧美成人sm免费视频| 成人免费视频网| 欧美又大又硬又粗bbbbb| 日本不卡视频在线播放| 亚洲综合中文字幕在线| 91午夜理伦私人影院| 精品一区二区三区四区| 岛国av一区二区在线在线观看| 国产精品视频一区二区高潮| 91久久国产婷婷一区二区| 亚洲国产精品久久久| 最新国产成人av网站网址麻豆| 日韩中文字幕国产| 欧美日韩中文字幕综合视频| 欧美在线视频一二三| 国产97在线播放| 久久精品欧美视频| 欧美成人午夜剧场免费观看| 中文国产亚洲喷潮| 国产精品视频内| 日韩美女福利视频| 97婷婷大伊香蕉精品视频| 亚洲国产精品99久久| 亚洲精品欧美日韩| 浅井舞香一区二区| 不用播放器成人网| 久久综合九色九九| 欧美在线精品免播放器视频| 国产精品吹潮在线观看| 岛国视频午夜一区免费在线观看| 国产精品一区二区在线| 色综久久综合桃花网| 欧美亚洲成人免费| 久久久午夜视频| 国产欧亚日韩视频| 一区二区三区亚洲| 中国人与牲禽动交精品| 日韩视频在线免费| 91成人在线播放| 日韩在线播放av| 亚洲第一网中文字幕| 91久久精品一区| 97免费在线视频| 国产国语videosex另类| 久久久久久久久久久av| 成人激情在线播放| 亚洲精品一区久久久久久| 亚洲免费电影一区| 69久久夜色精品国产69| 日韩中文字幕在线| 国产日产欧美精品| 影音先锋欧美在线资源| 欧美日韩国产在线看| 亚洲国产精品热久久| 亚洲欧美日韩区| 91免费在线视频网站| www.国产精品一二区| 国产精品久久久久国产a级| 综合国产在线观看| 国产丝袜精品第一页| 国产精品美乳一区二区免费| 国产成人精品在线播放| 欧美电影免费观看网站| 欧美韩日一区二区| 亚洲欧美日韩精品久久奇米色影视| 国产精品黄色影片导航在线观看| 欧美精品久久久久久久久久| 国产拍精品一二三| 欧美中文字幕视频| 欧美日本高清一区| 18一19gay欧美视频网站| 欧美大片免费观看| 成人在线一区二区| 欧美性生活大片免费观看网址| 久久免费在线观看| 91在线观看免费| 精品丝袜一区二区三区| 久久久人成影片一区二区三区观看| 国产日本欧美一区二区三区在线| 91精品久久久久久久久久另类| 国产z一区二区三区| 国产va免费精品高清在线观看| 成人精品在线观看| 亚洲国产一区二区三区在线观看| 亚洲精品成人久久| 国产亚洲人成网站在线观看| 亚洲视频一区二区| 亚洲人成在线观看网站高清| 欧美成人三级视频网站| 粗暴蹂躏中文一区二区三区| 国产一区二区av| 亚洲电影免费在线观看| 九九精品视频在线| 韩国视频理论视频久久| 992tv成人免费视频| 欧美在线观看视频| 欧美亚洲国产视频小说| 亚洲人成在线电影| 久久99国产精品自在自在app| 超碰日本道色综合久久综合| 成人黄色免费在线观看| 国产欧美一区二区三区在线看| 亚洲a区在线视频| 欧美综合第一页| 韩国一区二区电影| 91夜夜未满十八勿入爽爽影院| 国产精品视频在线播放| 久久影视电视剧免费网站清宫辞电视| 在线播放国产精品| 日本aⅴ大伊香蕉精品视频| 亚洲欧美中文日韩在线| 精品久久久久久久久久国产| 91久久精品国产91久久性色| 欧美性猛交xxxx乱大交3| 欧美成人精品不卡视频在线观看| 国产精品久久97| 一本色道久久88亚洲综合88| 亚洲性线免费观看视频成熟| 国产精品香蕉国产| 亚洲欧洲日韩国产| 日本伊人精品一区二区三区介绍| 亚洲精品第一国产综合精品| 91chinesevideo永久地址| 91精品国产自产在线观看永久| 日韩在线精品视频| 91免费高清视频| 国产精品一区专区欧美日韩| 亚洲欧美中文在线视频| 精品久久久国产精品999| 欧美黑人一级爽快片淫片高清| 国内免费久久久久久久久久久| 亚洲iv一区二区三区| 日韩在线观看免费av| 久久免费视频观看| 欧美午夜精品伦理| 日韩精品中文字幕有码专区| 日本一区二区不卡| 疯狂做受xxxx欧美肥白少妇| 欧美xxxx18国产| 亚洲人成自拍网站| 国产拍精品一二三| 91在线色戒在线| 久久精品成人欧美大片| 欧美风情在线观看| 欧美有码在线观看视频| 久久精品人人做人人爽| 57pao成人永久免费视频| 日韩精品免费在线视频观看| 97在线观看免费| 97在线观看免费高清| 亚洲乱码一区av黑人高潮| 午夜精品久久久99热福利| 亚洲欧洲中文天堂| 日韩精品极品在线观看播放免费视频|