我应该如何加密数据发送在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();
        }
      }
    }
  }
}

谢谢你,米格尔

我应该如何加密数据发送在URL

在我收到的时事通讯中,我看到类似/unsubscribe?u=16b832d9ad4b28edf261f56df。我一直在寻找这样的东西与电子邮件以某种方式"隐藏"

这不是"隐藏的"。所有这些都是对存储库(例如数据库)的引用,其中包含取消订阅所需的所有信息。本质上是一个键,进入包含订阅者所有必要信息的记录。

如果可行,这可能比加密URL中的单个值更容易。

如果您仍然想加密值(以避免在DB中存储和重新设计),在URL末尾使用=有什么问题?它只是一个字符作为加密输出的一部分?