求解,领导让我想办法重写 加密过程,使用自定义的密钥 128位的
using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using System.Web.UI;
public class VPage : Page
{
static private DirectoryInfo _Dir;
private static DirectoryInfo Dir
{
get
{
if (_Dir == null)
{
_Dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
if (!_Dir.Exists)
_Dir.Create();
_Dir = new DirectoryInfo(Path.Combine(_Dir.FullName, "ViewState"));
if (!_Dir.Exists)
_Dir.Create();
}
return _Dir;
}
}
protected override object LoadPageStateFromPersistenceMedium()
{
PageStatePersister ps = this.PageStatePersister;
ps.Load();
if (ps.ControlState != null)
ps.ControlState = 反序列化对象((string)ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = 反序列化对象((string)ps.ViewState);
return new Pair(ps.ControlState, ps.ViewState);
}
protected override void SavePageStateToPersistenceMedium(object state)
{
PageStatePersister ps = this.PageStatePersister;
if (state is Pair)
{
ps.ControlState = ((Pair)state).First;
ps.ViewState = ((Pair)state).Second;
}
else
ps.ViewState = state;
if (ps.ControlState != null)
ps.ControlState = 序列化对象(ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = 序列化对象(ps.ViewState);
ps.Save();
}
private object 反序列化对象(string stateID)
{
if (stateID == null)
return null;
object state = Cache[stateID];
if (state == null)
using (var stream = File.OpenRead(Path.Combine(Dir.FullName, stateID)))
state = new BinaryFormatter().Deserialize(stream);
else
Cache.Remove(stateID);
return state;
}
private string 序列化对象(object obj)
{
string stateID = Guid.NewGuid().ToString("N");
Cache.Insert(stateID, obj, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration);
using (var stream = File.Create(Path.Combine(Dir.FullName, stateID)))
new BinaryFormatter().Serialize(stream, obj);
return stateID;
}
static VPage()
{
ThreadPool.QueueUserWorkItem(h =>
{
var et = DateTime.Now.AddMinutes(-30);
Dir.GetFiles()
.Where(f => f.LastAccessTime < et)
.ToList()
.ForEach(f =>
{
try
{
f.Delete();
}
catch { }
});
});
}
}
viewstate 中的信息都是公开的,它是控件的状态。因此它不怕人看(怕人看的信息也不可能展现给用户)。它要保证不被客户端篡改,是从比价普通的数据一致性角度,并不是怕人看到什么。
我想,ViewState 中的信息都是页面上的状态,那么用户就看页面表现就好了根本不用看 ViewState中有什么信息,领导具体是怕 ViewState 中有什么秘密呢?
领导是学 asp.net 有点着魔了,所以反而担心别人比自己学的更深、怕别人反序列化 __ViewState 信息进行调试?
viewstate 中的信息都是公开的,它是控件的状态。因此它不怕人看(怕人看的信息也不可能展现给用户)。它要保证不被客户端篡改,是从比价普通的数据一致性角度,并不是怕人看到什么。
我想,ViewState 中的信息都是页面上的状态,那么用户就看页面表现就好了根本不用看 ViewState中有什么信息,领导具体是怕 ViewState 中有什么秘密呢?
领导是学 asp.net 有点着魔了,所以反而担心别人比自己学的更深、怕别人反序列化 __ViewState 信息进行调试?
public class UUHiddenFieldPageStatePersister : HiddenFieldPageStatePersister
{
public UUHiddenFieldPageStatePersister(Page page)
: base(page)
{
}
public override void Load()
{
Stream stateStream = new FileStream("ViewStateContent.txt", FileMode.OpenOrCreate);
// Read the state string, using the StateFormatter.
StreamReader reader = new StreamReader(stateStream);
IStateFormatter formatter = this.StateFormatter;
string fileContents = reader.ReadToEnd();
// Deserilize returns the Pair object that is serialized in
// the Save method.
if (fileContents != "" && fileContents != null)
{
string json = (string)formatter.Deserialize(fileContents);
Pair statePair = JsonConvert.DeserializeObject<Pair>(json);
ViewState = statePair.First;
ControlState = statePair.Second;
reader.Close();
stateStream.Close();
}
//return;
base.Load();
}
public override void Save()
{
if (this.ViewState != null || this.ControlState != null)
{
if (Page.Session != null)
{
Stream stateStream = new FileStream("ViewStateContent.txt", FileMode.OpenOrCreate);
StreamWriter writer = new StreamWriter(stateStream);
IStateFormatter formatter = this.StateFormatter;
Pair statePair = new Pair(this.ViewState, this.ControlState);
// Serialize the statePair object to a string.
string json = JsonConvert.SerializeObject(statePair);
string serializedState = formatter.Serialize(json);
writer.Write(serializedState);
writer.Close();
stateStream.Close();
}
else
{
throw new InvalidOperationException("Session needed for StreamPageStatePersister.");
}
}
//return;
base.Save();
}
}
public partial class Default : System.Web.UI.Page
{
private string TstViewStateKey = "TestTxt";
private PageStatePersister pageStatePersister = null;
protected override PageStatePersister PageStatePersister
{
get
{
//return base.PageStatePersister;
if (this.pageStatePersister == null)
{
this.pageStatePersister = new UUHiddenFieldPageStatePersister(this);
}
return this.pageStatePersister;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack == false)
{
this.TextBox1.Text = "这是个文本框";
this.ViewState[TstViewStateKey] = "[123测试文本321]";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string txt = this.ViewState[TstViewStateKey] == null ? "" : this.ViewState[TstViewStateKey].ToString();
this.Label2.Text = this.TextBox1.Text + txt;
}
}
有空吗,能不能帮我 看看我重写的 HiddenFieldPageStatePersister 到底哪里出了问题,我仿照 msdn的例子写的能存能取保存的ViewState 数据,但是到页面上之后,VIewState 就取不到了.
就是EnableViewStateMAC="true"ViewStateEncryptionMode="Always"设置这俩属性后,执行的加密~~~~~~求解,领导让我想办法重写加密过程,使用自定义的密钥128位的 解决方案 解决方案二: 设置machineKey和加密...
C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。...
ViewState: 之前讲过HttpHandler是无状态的,aspx是高级的HttpHandler,所以同样是 无状态的,在aspx.cs中一般也不要用类字段。那么如果确实需要存储一些页面 相关的变量怎么办呢?比如点击按钮“点击次数”加...
asp.net webform 登录窗口的用户名和密码的textbox如何禁用自动填充功能? 我的开发环境是:VS2010,浏览器是360浏览器。 问题:我要禁用textbox双击就弹出我前一次录入的信息提示。意思是:我上次登录过的用户名和...
C# winform和webform通用的加密解密方法UrlEncode和UrlDecode
问题在于为什么微软如此热衷于丢弃传统的APS.NET Webform而转向ASP.NET MVC?本文就主要来讨论这个问题。 ASP.NET Webform 后台代码(behind code)—— 福音与诅咒 如果你密切关注过ASP.NET Webform技术,你...
## 前台代码: ``` ID="GridView1" runat="server" onselectedindexchanged="GridView1_SelectedIndexChanged"> ``` ## 后台代码: ``` using System;...```
WebForm中的ViewState为何不能向MVC中的ViewData那样使用? (已修改标题,最初的“ViewState与ViewData的区别研究”可能让大家都把目标都放到是不是持久化上了) 项目开发中新同事问到asp.net WebForm...
dynamic wherePart = new ExpandoObject(); wherePart.StartTime = DateTime.ParseExact(this.TxtStarTime.Text, "yyyy-MM-dd",null); 这样写,为什么报错了? 错误 Missing compiler required member 'Microsoft...
webform的验证控件的EnableClientScript设为true为什么还是无法启动客户端脚本验证? <!DOCTYPE html> ; charset=utf-8"/> <title></title> 用户名"> ...
为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用一些例子说明我文章中的观点,结论。比如我会用静态控件(declared controls)和动态控件(dynamic controls)两个方面
URL重写就是首先获得一个进入的URL请求,然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是"list.aspx?id=1",那么它可以被重写成"list.1html",这样的URL,这样的网址可以更...
如图,点击Role下拉框,会有四个用户,选择一个用户后,随便勾选下面的复选框,然后save,完成保存!请问这个具体怎么实现,急!
在vs2005中在girdview中PagerTemplate内容不显示AllowPaging="True" AllowSorting="True" OnRowDataBound="GV_fuwu_RowDataBound" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines=...
今天我下载了 vs2019 新建webform项目 后台代码 语句发了变化 请问大佬们怎么解决? 
Winform public static string StringToMD5Hash(string inputString) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.Get
现在有一种言论:C#过时了!!! ... 有人说现在是移动互联网时代,C#作为微软主推的语言,无法开发移动应用成为其一大硬伤!!...有人说人类社会将要进入人工智能时代,C#做智能硬件开发不如C++!...提出这种说...
我为WebForm嵌套了一个Master,在ContentPlaceHolder里面加了一个Button,其事件为Button_Onclick(),但是为什么触发该事件无反应? 恳请各位行家高手不吝惜指教!万分感谢!!
刚才看到Joe Stagner的博客,他已经离开微软。微软的.NET平台在Scott Guthrie的带领下发展的虎虎生威,Joe是.NET平台中WebForm开发的核心成员,这两年ASP.NET MVC流行起来,在Scott Hanselman和Phil Haack的带领下
文章是原作者一字一字亲手码出来的,每天下班用休息时间写一点,持续了二十来天。且对于文章上下衔接、概念引入花了很多心思,致力让很多概念在本文中显得通俗。
它包括两部分,一个是如何编写Web应用程序的规范,另一个则是实现这一规范的Web编程框架,而ASP.NET就是用来实现WebForm模型的框架,当然ASP.NET的功能比较强大,留下了足够的空间,足够我们在此基础之上实现另外的...
一、什么是ViewState 二、使用
最近在给公司做一套报表查询系统!用的是ASP.NET。以前也在用,只是没有这次这样认真的去用它!大家知道ASP.NET做程序开发两种方式:asp的面条方式,将所有的逻辑控制与代码写在一块,写成一堆;...
我目前只知道在请求的page_load中通过request.querystring()获取,但是通过ajax的post到[webmethod]静态方法中的请求,如何获取request的url和data? 请各路大神不吝赐教![图片说明]...
它包括两部分,一个是如何编写Web应用程序 的规范,另一个则是实现这一规范的Web编程框架,而ASP.NET就是用来实现WebForm模型的框架,当然ASP.NET的功能比较强大,留下了足 够的空间,足够我们在此基础之上实现另外...
2020华为软件精英挑战赛初复赛赛题包,不包含民间数据集,民间数据集在博客中给出大佬github地址。
微信小程序源码,包含:图片展示、外卖点餐、小工具类、小游戏类、演绎博览、新闻资讯、医疗保健、艺术生活等源码。