限制加密中使用的字符

时间:2012-09-19 13:27:31

标签: c# .net asp.net-mvc-3 encryption

我有一个非常简单的加密类,使用tripleDES加密我网站上特定页面的查询字符串。我这样做是为了防止人们根据我们的数据库ID顺序抓取页面。

无论如何,我已经习惯了 this encryption method

但是,它包含3d%和其他一些special characters,它们不应位于查询字符串中,并且出于安全考虑而被Url Scan拒绝。生成的实际加密字符串中有=。我不想更改网址扫描,但我想知道是否有办法限制 <{1}}或其他内容的加密字符。我对加密几乎一无所知,我实际上只是混淆了查询字符串,因此我对其对查询字符串加密的其他选项持开放态度。

2 个答案:

答案 0 :(得分:9)

您链接的方法使用Base64 encoding将加密的字节数组(可能包含各种“不可打印”字节)转换为仅包含A - {的表单{1}},Z - az - 09+/

但是,最后3个不适用于网址。

你可以在Base64字符串上做一个简单的=,用URL安全字符替换这些字符,例如String.Replace =&gt; +- =&gt; /_ =&gt; =。你甚至可以完全放弃.,因为它们只是填充字符。 (进行前两次替换并删除=suggested by RFC3548。)

然后,当您想要解密字符串时,只需反转此替换。如果您完全删除=,请添加=,直到字符串的长度为4的倍数。

答案 1 :(得分:3)

如果您不知道自己在做什么(即使您这样做),也不应该使用加密技术。相反,请按原样使用加密,并使用UrlEncode结果。