• ASP.NET 快乐建站系列 电子期刊(Enewsletter)内容中客户独一链接的巧妙加密


    背景:

    公司经常要发出一些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"]);

    简单且安全,有什么不足之处希望大家海涵,欢迎回帖讨论,欢迎关注,欢迎大家提出不同观点。

  • 相关阅读:
    轻松学MVC4.0–6 MVC的执行流程
    (转)从零实现3D图像引擎:(12)构建支持欧拉和UVN的相机系统
    (转)从零实现3D图像引擎:(9)四元数函数库
    (转)从零实现3D图像引擎:(10)Hello3DWorld
    (转)用AGG实现高质量图形输出(二)
    (转)Direct3D新功能
    (转)从零实现3D图像引擎:(7)矩阵函数库
    (转)用AGG实现高质量图形输出(一)
    (转)从零实现3D图像引擎:(13)把宽高比、透视投影矩阵、屏幕变换矩阵说透
    (转)创业公司的CEO每周须必做的13件事
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1963777.html
Copyright © 2020-2023  润新知