【问题标题】:Problem Encrypting a Cookie Using Handmade Encryption (ASP.NET)使用手工加密 (ASP.NET) 加密 Cookie 的问题
【发布时间】:2009-05-13 04:34:45
【问题描述】:

我遇到了一个奇怪的问题:

我正在加密 cookie 的内容。

当我在 Visual Studio 中运行我的代码时,它运行良好,但给了我“错误请求,HTTP 错误 400。请求格式错误。”当我从服务器运行它时。

这里是加密类 Encrypt Cook.cs,位于 app_code 中:

public class EncryptCook
{
public EncryptCook()
{
    //
    // TODO: Add constructor logic here
    //
}

public  string EncryptString(string data)
{
    try
    {
        string encryptString = "";
        if (data != "")
        {
            char a;
            int key = Convert.ToInt16(DateTime.Now.Day);
            int j = 0;

            for (int i = 0; i < data.Length; i++)
            {

                j = (int)data[i];
                j = j + key;
                a = (char)j;
                encryptString = encryptString + Convert.ToString(a);

            }
        }
        return encryptString;
    }
    catch
    {
        return "";
    }
}

public   string DeEncryptString(string data)
{
    try
    {
        string encryptString = "";
        if (data != "")
        {

            char a;
            int j = 0;
            int key = Convert.ToInt16(DateTime.Now.Day);
            for (int i = 0; i < data.Length; i++)
            {

                j = (int)data[i];
                j = j - key;
                a = (char)j;
                encryptString = encryptString + Convert.ToString(a);

            }
        }
        return encryptString;
    }
    catch
    {
        return "";
    }

}

很简单,它接受一个字符串,从中提取字符并将该字符替换为另一个字符,例如,给定“a”并且今天的日期是 13,它将用“a”之后的第 13 个字符替换它,即“m”。

这是我的登录控件:

protected void Button1_Click(对象发送者,EventArgs e) { //检索用户的代码,工作正常 EncCook 厨师=新 EncCook(); HttpCookie cookie = new HttpCookie("登录状态"); cookie["userid"] =cook.EncryptString(name); cookie["用户名"] = cook.EncryptString(医生); cookie["email"] = cook.EncryptString(email); cookie["address"] = cook.EncryptString(address); Response.Cookies.Add(cookie); }

好吧,这段代码在本地机器上运行良好,但给我一个“错误的请求 HTTP 错误 400。请求格式错误。”错误。

我认为这是因为编码,但我不确定,如果它今天是 20 那么 ~ + 20 看起来像一个盒子字符。

谢谢

【问题讨论】:

  • 尝试使用 IIS 在您的计算机上本地运行它,而不是 Visual Studios 开发网络服务器。您可能会遇到与您的服务器相同的错误。

标签: c# asp.net


【解决方案1】:

请不要使用自制加密。只能以尴尬收场。如果你捕捉到一个异常,你可能应该重新抛出它或返回 null,而不是空字符串。该错误很可能是因为您所谓的加密正在创建在当前字符集中无效的字节序列。

【讨论】:

  • 感谢您的回答。但是您能告诉我是什么问题吗,我的意思是它在我的本地机器上运行良好,但在服务器上却没有
  • +1 我同意。您可以使用任何其他对称算法来加密和解密具有相同私钥(存储在 web.config 中)的数据。确保输出有效数据,您应该为此使用 Base64 编码字符串。
  • 请参阅stackoverflow.com/questions/845623/… 了解可在 .NET 中使用的真正对称加密算法。正如西蒙所说(对不起),Base64(例如msdn.microsoft.com/en-us/library/dhx0d524.aspx)可用于正确编码cookie中的加密数据。
  • 我建议您对您的密文进行 URL 编码或 Base64 编码。这样做将确保生成的字符串对 HTTP 协议有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多