我正在研究基于从SymmetricAlgorithm继承的类的加密功能,例如TripleDes,DES等.
基本上有两种方法可以为我的算法类生成一致的密钥和IV,PasswordDeriveBytes并且Rfc2898DeriveBytes都继承自DeriveBytes抽象类.
该PasswordDeriveBytes.GetBytes()方法在.NET框架中标记为过时,建议使用Rfc2898DeriveBytes.GetBytes(),因为它与PBKDF2标准匹配.但是,根据我的测试,GetBytes()在Rfc2898DeriveBytes类中调用相同的方法几乎比类中的方法慢15倍PasswordDeriveBytes,这导致意外的CPU使用率(总是高于50%).
这是一些测试数据:
基于测试,Rfc2898DeriveBytes在生产环境中不良性能是不可接受的.
之前有没有人注意到这个问题?任何解决方案我仍然可以使用标准的解决方案而不会达到性能?使用过时方法的任何风险(可能在将来的版本中删除)?
多谢你们!
编辑:
可能我发现问题出在哪里...默认的迭代计数数为PasswordDeriveBytes100,而for Rfc2898DeriveBytes为1000.在我将它们更改为与1000相同的数字后,执行Rfc2898DeriveBytes只有两倍.
我们知道MVC以这种格式返回JsonResult的DateTime:,/Date(1240718400000)/我们知道如何在JS中解析它.
但是,似乎MVC不接受以这种方式发送的DateTime参数.例如,我有以下Action.
[HttpGet]
public ViewResult Detail(BookDetail details) { //... }
Run Code Online (Sandbox Code Playgroud)
BookDetail类包含一个名为CreateDate的DateTime字段,我以这种格式从JS传递了一个JSON对象:
{"CreateDate": "/Date(1319144453250)/"}
Run Code Online (Sandbox Code Playgroud)
CreateDate被识别为null.
如果我以这种方式传递JSON,它按预期工作:
{"CreateDate": "2011-10-10"}
Run Code Online (Sandbox Code Playgroud)
问题是我无法以简单的方式更改客户端代码,必须坚持/ Date(1319144453250)/这种格式.我必须在服务器端进行更改.
如何解决这个问题呢?这与ModelBinder有关吗?
非常感谢提前!
我想我们中的许多人过去常常面临同样的问题:将现有Web表单App移植到MVC的最佳实践是什么.对我来说,情况是我们同时支持Web表单和MVC.这意味着,我们在MVC中创建新功能,同时在Web表单中维护旧页面,并且它们都在同一个项目中.
关键是:我们希望保持DRY(不要重复自己)原则并尽可能减少重复代码.ASPX页面不是问题,因为我们只在MVC中创建新功能,但仍然有一些共享组件我们想要重新使用新/旧页面:
这里的问题是:是否可以创建一个可用于Web表单和MVC的公共母版页/用户控件?我知道,ViewMasterPage从继承母版和ViewUserControl从继承用户控件,所以它也许 OK,让Web窗体和MVC ASPX页面参考MVC版本.我做了一些测试,发现有时它会在渲染用户控件时产生错误.
您可以与我分享任何想法/经验吗?非常感谢它.
背景:
这个UI项目已经创建多年,有20多人正在研究它.在我开始共同的母版页面试用之前,大约有50多个Web表单页面和只有一个MVC页面.我们在MVC上创建了新功能,但旧页面保留在Web表单中.
这种情况将持续很长时间,可能是因为这是一家以业务为导向的公司,因此新功能始终处于更高优先级.这意味着我们需要同时支持两者.