使用代码解析ViewSate的Base64值?
ViewState的值可以加密,首先,确保Page的EnableViewStatMac=true,然后在Machine.Config中配置machineKey。
默认Machine.Config中的machineKey:
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
validation="SHA1" />
本人关于加密ViewState没有测试。
通过使用浏览器,可以获取ViewState的隐藏内容,使用下面的代码,可以解析:
{
byte[] by=System.Convert.FromBase64String(message);
string dest=System.Text.Encoding.ASCII.GetString(by);
return dest;
}
//如果ViewState的值为"dDw5NDA0MTAzOTY7dDxwPGw8cGFzczs+O2w8RmlzaDs+Pjs7PjtsPF9jdGwwO2NoZWNrO19jdGwxO19jdGwyO19jdGwzO2NiOz4+";
string source="dDw5NDA0MTAzOTY7dDxwPGw8cGFzczs+O2w8RmlzaDs+Pjs7PjtsPF9jdGwwO2NoZWNrO19jdGwxO19jdGwyO19jdGwzO2NiOz4+";
Response.Write(Base2String(source));
;l
其中,cb是指动态生成的CheckBox,共动态生成5个CheckBox,check是动态生成的第2个CheckBox的Id,其他的没有指定Id。
如果在Page的后台代码中完成上面的操作,需要重写SavePageStateToPersistenceMedium():
{
// 调用基类的方法,完成基本操作
base.SavePageStateToPersistenceMedium(viewState);
// 获取ViewState的Base64值
LosFormatter format = new LosFormatter();
StringWriter writer = new StringWriter();
format.Serialize(writer, viewState);
string vsRaw = writer.ToString();
Response.Write("ViewState Raw: " + Server.HtmlEncode(vsRaw));
// 解析内容
byte[] buffer = Convert.FromBase64String(vsRaw);
string vsText = Encoding.ASCII.GetString(buffer);
Response.Write("ViewState Text: " + Server.HtmlEncode(vsText));
}