【发布时间】:2017-02-19 01:43:07
【问题描述】:
我在网上四处寻找一种简单的小加密方法,它可以接收一个字符串,加密它,然后解密它。我的想法是我在一个不能在计划文本中的 URL 中有我需要的 ID。
我发现的类大部分时间都很好用,但有时我会得到一个包含 / 的加密字符串:
OSprnGR/0os4DQpQsa0gIg==
您可以想象,在 URL 中使用这会导致问题。所以我想,如果我只是对字符串进行 UrlEncode,就可以解决问题。
它没有。
即使 URL 如下所示,我仍然会收到相同的错误:
http://localhost:54471/BrokerDashboard/BuyingLeads/LeadView/OSprnGR%2f0os4DQpQsa0gIg%3d%3d
而不是这个:
http://localhost:54471/BrokerDashboard/BuyingLeads/LeadView/OSprnGR/0os4DQpQsa0gIg==
HTTP 错误 404.0 - 未找到 您要查找的资源已被删除、名称已更改或暂时不可用。
这是我正在使用的课程:
public static class Encryption
{
public static string keyString { get { return "6C3A231C-57B2-4BA0-AFD6-306098234B11"; } }
private static byte[] salt = Encoding.ASCII.GetBytes("somerandomstuff");
public static string Encrypt(string plainText)
{
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(keyString, salt);
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(new CryptoStream(ms, new RijndaelManaged().CreateEncryptor(key.GetBytes(32), key.GetBytes(16)), CryptoStreamMode.Write));
sw.Write(plainText);
sw.Close();
ms.Close();
string beforeUrlEncoded = Convert.ToBase64String(ms.ToArray());
string afterUrlEndcoded = HttpUtility.UrlEncode(beforeUrlEncoded);
return afterUrlEndcoded;
}
public static string Decrypt(string encrypted)
{
//string urlDecoded = HttpUtility.UrlDecode(encrypted); // <--- Turns out you don't need this
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(keyString, salt);
ICryptoTransform d = new RijndaelManaged().CreateDecryptor(key.GetBytes(32), key.GetBytes(16));
byte[] bytes = Convert.FromBase64String(encrypted);
return new StreamReader(new CryptoStream(new MemoryStream(bytes), d, CryptoStreamMode.Read)).ReadToEnd();
}
}
编辑:
路线如下:
routes.MapRoute(
name: "BrokerLead",
url: "BrokerDashboard/BuyingLeads/LeadView/{id}"
);
【问题讨论】:
-
你试过用
HttpServerUtility.UrlTokenEncode代替HttpUtility.UrlEncode吗? -
只是确认您已经阅读了有关 bade64 的维基百科文章并放弃了使用它的 url 安全版本的可能性。我建议在帖子中澄清这一点。
-
@AlexeiLevenkov - .NET 有能力使用 URL Safe Base64 编码吗?
-
没有。但是有很多答案显示了如何做到这一点......
-
我已经回滚了您添加问题答案的无效编辑。如果您觉得需要单独的答案,请将其添加为答案。
标签: c# asp.net-mvc encryption url-encoding