我使用AES加密并传入querystring,Html.Encode会正确转换所有字符,这样调用Decode会产生相同的字符串吗?
答案 0 :(得分:3)
我试图做同样的事情,并在这里找到答案:
Encrypting a value using MySQL's AES_ECRYPT function, then passing it in a URL string, using PHP
斜杠可能会导致问题,即使在编码url时也是如此。对我有用的解决方案是转换为十六进制,将其传递给URL,然后在解密之前恢复为二进制。
答案 1 :(得分:1)
HTML编码与URL编码不同。如果要在HTML文档中输出URL,则使用HTML编码。它逃脱了HTML的东西。要在HTML页面中输出URL,您应首先对值进行URL编码以生成有效的URL,然后在要在HTML页面中编写时对其进行HTML编码。
使用HttpUtility.UrlEncode
。或者,您可以先使用byte[]
将Convert.ToBase64String
转换为base64,然后使用HttpUtility.UrlEncode
对其进行编码。它可能会生成一个较短的URL。
答案 2 :(得分:0)
在将HttpUtility.UrlEncode
放入查询字符串之前调用它将对其进行正确编码。
在接收端,QueryString属性已经对值进行了解码,因此您不应该调用任何解码方法(Convert.FromBase64String
除外)
答案 3 :(得分:0)
AES以面向字节的方式加密。要在查询字符串中传输字节,您需要将其转换为文本。一种方法是使用Convert.ToBase64String()。
一旦转换为文本,您需要确保通过UrlEncode()正确编码任何非字母数字。
在接收端,如果它已经是UrlDecoded(),你应该能够通过Convert.FromBase64String()将文本转换为加密的字节流,然后解密生成的字节数组。