【发布时间】:2014-06-30 23:59:32
【问题描述】:
我正在使用以下加密技术在 MVC 应用程序中加密查询字符串值。
所以网址将类似于controller/details/rlSRlRZwzbU%3d
但是当 param =2 和 KEY=mcbgp23njwmcinu0tij05vc2 这个函数返回UhMZc7/MNK8=。
所以格式化后的 url 将是 controller/details/UhMZc7/MNK8%3d 并给出 404 Error
public static string Encrypt(string dataStr)
{
Byte[] inputByteArray = Encoding.ASCII.GetBytes(dataStr);
var mstr = new MemoryStream();
string KEY = HttpContext.Current.Session.SessionID;
var key = Encoding.ASCII.GetBytes(KEY.Substring(0, 8));
var des = new DESCryptoServiceProvider();
var cstr = new CryptoStream(mstr, des.CreateEncryptor(key, key), CryptoStreamMode.Write);
cstr.Write(inputByteArray, 0, inputByteArray.Length);
cstr.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
如何使这个函数成为 MVC URL 安全的?有没有其他好的技术来生成 url-safe 加密格式?
编辑:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
【问题讨论】:
-
显示您的路线图
-
@CarlosLanderas,添加路线映射
-
我会使用Need an Encryption/decryption method does not have a '/' in the encrypted string中描述的url安全Base64编码
-
我还想指出您的加密货币很烂。仅比凯撒加密强。 1)DES 的密钥太小(使用 AES) 2)缺少 MAC 启用填充预言(使用经过身份验证的加密) 3)您默默地破坏了非 ASCII 输入(使用 UTF8) 4)您使用与密钥和 IV 相同的值。您应该为您加密的每条消息使用一个新的随机 IV。 5)您使用 ASCII 字符串作为键。密钥是二进制的,请改用 Base64 编码的随机值。 6)不需要流。只需致电
encryptor.TransformFinalBlock。 -
@CodesInChaos,你的步骤听起来不错。你能给我提供一个实现的代码/文章吗?我将遵循这一点,因为我是开发新手并且不太了解加密技术:(
标签: c# asp.net asp.net-mvc asp.net-mvc-4 encryption