问题描述
就是EnableViewStateMAC="true"ViewStateEncryptionMode="Always"设置这俩属性后,执行的加密~~~~~~求解,领导让我想办法重写加密过程,使用自定义的密钥128位的解决方案
解决方案二:
设置machineKey和加密算法validation就行了,为什么要自己写呢
解决方案三:
领导认为不安全
解决方案四:
举个不安全的实际例子看看。
解决方案五:
其实asp.net会自动检查它写出的__ViewState有没有被客户端篡改,因此你们领导的“担心”我觉得是一种怪现象,也许你们真的很闲?你们收入太多了!你们领导感觉应该让你做点任何asp.net都没有受命做过、没有机会去网上抄袭的事情?!我许多年以前写过一个代码usingSystem;usingSystem.IO;usingSystem.Linq;usingSystem.Runtime.Serialization.Formatters.Binary;usingSystem.Threading;usingSystem.Web.UI;publicclassVPage:Page{staticprivateDirectoryInfo_Dir;privatestaticDirectoryInfoDir{get{if(_Dir==null){_Dir=newDirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"App_Data"));if(!_Dir.Exists)_Dir.Create();_Dir=newDirectoryInfo(Path.Combine(_Dir.FullName,"ViewState"));if(!_Dir.Exists)_Dir.Create();}return_Dir;}}protectedoverrideobjectLoadPageStateFromPersistenceMedium(){PageStatePersisterps=this.PageStatePersister;ps.Load();if(ps.ControlState!=null)ps.ControlState=反序列化对象((string)ps.ControlState);if(ps.ViewState!=null)ps.ViewState=反序列化对象((string)ps.ViewState);returnnewPair(ps.ControlState,ps.ViewState);}protectedoverridevoidSavePageStateToPersistenceMedium(objectstate){PageStatePersisterps=this.PageStatePersister;if(stateisPair){ps.ControlState=((Pair)state).First;ps.ViewState=((Pair)state).Second;}elseps.ViewState=state;if(ps.ControlState!=null)ps.ControlState=序列化对象(ps.ControlState);if(ps.ViewState!=null)ps.ViewState=序列化对象(ps.ViewState);ps.Save();}privateobject反序列化对象(stringstateID){if(stateID==null)returnnull;objectstate=Cache[stateID];if(state==null)using(varstream=File.OpenRead(Path.Combine(Dir.FullName,stateID)))state=newBinaryFormatter().Deserialize(stream);elseCache.Remove(stateID);returnstate;}privatestring序列化对象(objectobj){stringstateID=Guid.NewGuid().ToString("N");Cache.Insert(stateID,obj,null,DateTime.Now.AddMinutes(5),System.Web.Caching.Cache.NoSlidingExpiration);using(varstream=File.Create(Path.Combine(Dir.FullName,stateID)))newBinaryFormatter().Serialize(stream,obj);returnstateID;}staticVPage(){ThreadPool.QueueUserWorkItem(h=>{varet=DateTime.Now.AddMinutes(-30);Dir.GetFiles().Where(f=>f.LastAccessTime<et).ToList().ForEach(f=>{try{f.Delete();}catch{}});});}}使用它替换你的页面的父类Page即可。不过这原本并不是为了什么“加密”的目的而设计的。但是既然信息根本不抛给客户端,那么自然你们领导也没什么可说的了。
解决方案六:
额,我表示你们头有个基本的东西没搞明白,任何一个学过点基础安全知识的都会明白一个基本理论“系统的保密性不依赖于对加密体制或算法的保密,而仅依赖于密钥的安全性。对于当今的公开密码系统,加密解密算法是公开的”
解决方案七:
viewstate中的信息都是公开的,它是控件的状态。因此它不怕人看(怕人看的信息也不可能展现给用户)。它要保证不被客户端篡改,是从比价普通的数据一致性角度,并不是怕人看到什么。我想,ViewState中的信息都是页面上的状态,那么用户就看页面表现就好了根本不用看ViewState中有什么信息,领导具体是怕ViewState中有什么秘密呢?领导是学asp.net有点着魔了,所以反而担心别人比自己学的更深、怕别人反序列化__ViewState信息进行调试?
解决方案八:
viewstate中的信息都是公开的,它是控件的状态。因此它不怕人看(怕人看的信息也不可能展现给用户)。它要保证不被客户端篡改,是从比价普通的数据一致性角度,并不是怕人看到什么。我想,ViewState中的信息都是页面上的状态,那么用户就看页面表现就好了根本不用看ViewState中有什么信息,领导具体是怕ViewState中有什么秘密呢?领导是学asp.net有点着魔了,所以反而担心别人比自己学的更深、怕别人反序列化__ViewState信息进行调试?
解决方案九:
应该保证秘钥的安全,而不是算法。
解决方案十:
viewstate中的信息都是公开的,它是控件的状态。因此它不怕人看(怕人看的信息也不可能展现给用户)。它要保证不被客户端篡改,是从比价普通的数据一致性角度,并不是怕人看到什么。我想,ViewState中的信息都是页面上的状态,那么用户就看页面表现就好了根本不用看ViewState中有什么信息,领导具体是怕ViewState中有什么秘密呢?领导是学asp.net有点着魔了,所以反而担心别人比自己学的更深、怕别人反序列化__ViewState信息进行调试?
解决方案十一:
有空吗,能不能帮我看看我重写的HiddenFieldPageStatePersister到底哪里出了问题,我仿照msdn的例子写的能存能取保存的ViewState数据,但是到页面上之后,VIewState就取不到了.
解决方案十二:
抄msdn不一定是唯一的方式。当年我们随便写上几十行代码,也被另外一个公司(这个软件公司早在前几年就上市了)的负责一个项目的人比较夸张地说什么“这是微软的代码啊!”。我就心说“也不看看我们这帮人中随便什么人胡写什么代码,就乱吹捧?明明是10分钟急急忙忙胡乱写的,只不过是一个demo,做事有多种方式,为什么不理解实质呢?”。这个东西是比较简单清晰的,我在#4楼的代码是在asp.net有那个意识要封装个PageStatePersister之前写的,但是实质是几乎一模一样的。你若参考,就参考代码内部的实质。若抄msdn上的一个样子,那么就只好自己研究了。 有空吗,能不能帮我看看我重写的HiddenFieldPageStatePersister到底哪里出了问题,我仿照msdn的例子写的能存能取保存的ViewState数据,但是到页面上之后,VIewState就取不到了.