我应该如何加密数据发送在URL
本文关键字:数据 URL 加密 何加密 我应该 | 更新日期: 2023-09-27 17:49:18
我需要加密我在URL中发送的字符串,稍后我需要解密它…
哪一种方法会更好?我尝试了以下操作:
string s = "String to be encrypted";
string encrypted = CipherUtility.Encrypt<RijndaelManaged>(s, "pass", "salt");
string decrypted = CipherUtility.Decrypt<RijndaelManaged>(encrypted, "pass", "salt");
但是加密的字符串在最后得到一个"="…我想避免那样。
我不确定这将是最好的选择…
CipherUtility如下:
public class CipherUtility
{
public static string Encrypt<T>(string value, string password, string salt)
where T : SymmetricAlgorithm, new()
{
DeriveBytes rgb = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt));
SymmetricAlgorithm algorithm = new T();
byte[] rgbKey = rgb.GetBytes(algorithm.KeySize >> 3);
byte[] rgbIV = rgb.GetBytes(algorithm.BlockSize >> 3);
ICryptoTransform transform = algorithm.CreateEncryptor(rgbKey, rgbIV);
using (MemoryStream buffer = new MemoryStream())
{
using (CryptoStream stream = new CryptoStream(buffer, transform, CryptoStreamMode.Write))
{
using (StreamWriter writer = new StreamWriter(stream, Encoding.Unicode))
{
writer.Write(value);
}
}
return Convert.ToBase64String(buffer.ToArray());
}
}
public static string Decrypt<T>(string text, string password, string salt)
where T : SymmetricAlgorithm, new()
{
DeriveBytes rgb = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt));
SymmetricAlgorithm algorithm = new T();
byte[] rgbKey = rgb.GetBytes(algorithm.KeySize >> 3);
byte[] rgbIV = rgb.GetBytes(algorithm.BlockSize >> 3);
ICryptoTransform transform = algorithm.CreateDecryptor(rgbKey, rgbIV);
using (MemoryStream buffer = new MemoryStream(Convert.FromBase64String(text)))
{
using (CryptoStream stream = new CryptoStream(buffer, transform, CryptoStreamMode.Read))
{
using (StreamReader reader = new StreamReader(stream, Encoding.Unicode))
{
return reader.ReadToEnd();
}
}
}
}
}
谢谢你,米格尔
在我收到的时事通讯中,我看到类似/unsubscribe?u=16b832d9ad4b28edf261f56df。我一直在寻找这样的东西与电子邮件以某种方式"隐藏"
这不是"隐藏的"。所有这些都是对存储库(例如数据库)的引用,其中包含取消订阅所需的所有信息。本质上是一个键,进入包含订阅者所有必要信息的记录。
如果可行,这可能比加密URL中的单个值更容易。
如果您仍然想加密值(以避免在DB中存储和重新设计),在URL末尾使用=
有什么问题?它只是一个字符作为加密输出的一部分?