【问题标题】:How can i encrypt and decrypt my Cookies in ASP.NET如何在 ASP.NET 中加密和解密我的 Cookie
【发布时间】:2016-06-01 23:09:44
【问题描述】:

正如标题所说,您好,我正在尝试通过页面传递我的 cookie,但我需要对它们进行加密,并且在特定页面 (Home.aspx) 上我需要对其进行解密。有人知道怎么做吗?

到目前为止我的代码,Login.aspx:

    HttpCookie UserCookie = new HttpCookie("Login");
    UserCookie.Value = txtUsername.Text;
    UserCookie.Expires = DateTime.Now.AddHours(2);
    Response.Cookies.Add(UserCookie);

【问题讨论】:

    标签: c# asp.net cookies encryption


    【解决方案1】:

    你可以使用MachineKey.Protect/MachineKey.Unprotect

    此示例代码还使用Base64 转换以避免cookie 值中的无效字符出现意外错误。

    MachineKey.Protect(Encoding.UTF8.GetBytes(cookieValue), "a token").FromBytesToBase64();
    
    Encoding.UTF8.GetString(MachineKey.Unprotect(Request.Cookies(cookieName).Value.FromBase64ToBytes, "a token"));
    

    源:https://msdn.microsoft.com/en-us/library/system.web.security.machinekey.protect(v=vs.110).aspx


    注意:以上方法为克服空异常的扩展方法

    public string FromBytesToBase64(this byte[] b)
    {
        return b == null ? "" :  Convert.ToBase64String(b);
    }
    
    public byte[] FromBase64ToBytes(this string s)
    {
        return s == null ? null : Convert.FromBase64String(s);
    }
    

    【讨论】:

    • 这在调用之间不一致。怎样才能被接受为答案?
    • @GabrielEspinoza 它显然为 OP 解决了这个问题,Jason 需要一个变体来让它对他有用,他发布了。你也可以,所以继续吧,OP可能会发现你比我更好,并将他接受的答案改为你的。 ....顺便说一句,过去 5 年我一直在自己的网站上使用它并取得了成功,所以我知道它正在工作
    • @LGSon 你能详细说明你是如何使用它的吗?因为我尝试使用它并且每次调用 Protect 方法时它都会给我一个不同的字符串。所以以后无法解密。
    • @GabrielEspinoza 确保对两者使用相同的令牌,在本例中为 "an authentication token"。现在不能说更多,因为我目前无法直接访问该代码段
    • FromBytesToBase64()从何而来,是扩展方法吗?
    【解决方案2】:

    我不得不稍微改变一下 LGSon 的答案,所以它对我有用。

    Convert.ToBase64String(MachineKey.Protect(Encoding.UTF8.GetBytes("your cookie value")))
    
    Encoding.UTF8.GetString(MachineKey.Unprotect(Convert.FromBase64String("your cookie value")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2011-03-02
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多