每当我尝试新的加密算法来获取加密字符串并在QUeryString中使用它时,我面临生成不干净字符串的问题(不包含(+)符号和(/)的字符串)。
我想在ASP.NET MVC中使用它。
是不是有办法加密避免这些迹象的字符串?。
我正在加密一个字符串(如果它是一个有效的查询字符串,它不应该没关系)然后我将这个字符串附加到我有的URL
编辑1: 这是加密代码:
public string Encrypt(string inputText, string key = "", string salt = "")
{
key = !string.IsNullOrEmpty(key) ? key : EncryptionKey;
salt = !string.IsNullOrEmpty(salt) ? salt : EncryptionSalt;
byte[] plainText = Encoding.UTF8.GetBytes(inputText);
using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
{
PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));
using (ICryptoTransform encryptor = rijndaelCipher.CreateEncryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
{
using (MemoryStream memoryStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainText, 0, plainText.Length);
cryptoStream.FlushFinalBlock();
string base64 = Convert.ToBase64String(memoryStream.ToArray());
// Generate a string that won't get screwed up when passed as a query string.
string urlEncoded = HttpUtility.UrlEncode(base64);
return urlEncoded;
}
}
}
}
}
编辑2:
编码字符串的示例:
1|6
就像那样,我希望通过ASP.NET MVC操作中的字符串参数来接收它。
答案 0 :(得分:1)
好吧,你可以转换为HEX字符串而不是base64,这只包含字母AF和0-9,所以url编码没有问题,但我很确定,那是' s不是问题的根源。
您是单独加密每个参数值还是一起加密整个查询字符串?因为如果你正在做后者,服务器将无法获得参数值。如果您正在执行前者,则还必须在服务器上单独解密每个参数值。
修改
我几年前做过类似事情,因为这是客户的要求。所以我的所有动作都只接受一个参数
http://example.com/Home/SomeAction?value=SomeEncryptedString
SomeEncryptedString包含一个加密的(后来当然是URLEncoded)查询字符串(value1=hello&value2=world
)。在服务器端,操作的第一步是解密字符串并将结果解析为NameValue集合。