标题有点绕,请原谅。这里解释一下…
背景:
公司经常要发出一些Enewsletter,里面含有一些特定的链接,当用户点击的邮件内链接的时候,会根据用户的信息带客户到不同的页面,对一些客户会让他们填写表格,而这些表格一开始已经提前放置了客户的基本信息。
客户的来源可能是从公司站点的原有注册用户,也有可能来自公司从其他地方收集的信息。-- 补充一句,这不同于一般的垃圾邮件,而是针对特定群体的邀请信。
问题:
实现的需求的速度是越快越好,所以取巧直接用了客户的电子邮件放置在链接当中,但是如何不让客户或其他人看到甚至修改呢?
实现:
哈!好在asp.net有个国度叫System.Security.Cryptography.
在此国度内居住的一类群体专管加密解密…
来创建一个针对本次需求的类:

public static class SimpleSecurity
{
private const string MyKey = "uptoyou";
static public string Decrypt(string myString, bool urlDecode)
{
TripleDESCryptoServiceProvider cryptDES3 = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider cryptMD5Hash = new MD5CryptoServiceProvider();
cryptDES3.Key = cryptMD5Hash.ComputeHash(ASCIIEncoding.ASCII.GetBytes(MyKey));
cryptDES3.Mode = CipherMode.ECB;
ICryptoTransform desdencrypt = cryptDES3.CreateDecryptor();
byte[] buff = Convert.FromBase64String(myString);
return ASCIIEncoding.ASCII.GetString(desdencrypt.TransformFinalBlock(buff, 0, buff.Length));
}
static public string Encrypt(string myString)
{
TripleDESCryptoServiceProvider cryptDES3 = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider cryptMD5Hash = new MD5CryptoServiceProvider();
cryptDES3.Key = cryptMD5Hash.ComputeHash(ASCIIEncoding.ASCII.GetBytes(MyKey));
cryptDES3.Mode = CipherMode.ECB;
ICryptoTransform desdencrypt = cryptDES3.CreateEncryptor();
byte[] buff = ASCIIEncoding.ASCII.GetBytes(myString);
return s = Convert.ToBase64String(desdencrypt.TransformFinalBlock(buff, 0, buff.Length));
}
}
要想加密客户的邮件生成所要的url地址,你可以:

SimpleSecurity.Encrypt(email);
生成的字符串可能类似于:6OpKSqWe57SAHBhmJJsF7Q%3d%3dccc, 因为Key在你的手上,别人要解密可能性很低。
接下来如果你想从客户页面请求的地址中解密得到他的邮件,只需要:

if (Request.QueryString["u"] != null)
email = SimpleSecurity.Decrypt(Request.QueryString["u"]);
简单且安全,有什么不足之处希望大家海涵,欢迎回帖讨论,欢迎关注,欢迎大家提出不同观点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架