使用手工加密加密Cookie的问题(ASP.NET)

Sea*_*ock 0 c# asp.net

我面临一个奇怪的问题:

我正在加密cookie的内容.

当我在Visual Studio中运行它时,我的代码工作正常,但给我一个"错误的请求,HTTP错误400.请求形成错误." 当我从服务器运行它.

以下是加密类Cookqs的加密类,位于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 "";
    }

}
Run Code Online (Sandbox Code Playgroud)

很简单,它需要一个字符串,从中提取字符并用另一个字符替换字符,例如,给定"a"并且今天的日期是13,它将用"a"之后的第13个字符替换它,即" M".

这是我的登录控件:

protected void Button1_Click(object sender, EventArgs e)
{
//code for retrieving user, which works fine
EncCook cook=new EncCook();
HttpCookie cookie = new HttpCookie("loginstatus");
            cookie["userid"] =cook.EncryptString(name);
            cookie["username"] = cook.EncryptString(doctor);
            cookie["email"] = cook.EncryptString(email);
            cookie["address"] = cook.EncryptString(address);
 Response.Cookies.Add(cookie);
}

好吧,这个代码在本地机器上工作正常,但是给我一个"错误请求HTTP错误400.请求形成错误." 错误.

我认为这是因为编码,但我不确定,就像今天的20,那么〜+ 20看起来像一个盒子角色.

谢谢

Mat*_*hen 7

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

  • +1我同意.您可以使用任何其他对称算法来使用相同的私钥加密和解密数据(存储在web.config中).确保输出有效数据,您应该使用Base64编码的字符串. (2认同)
  • 有关可在.NET中使用的实际对称加密算法,请参阅http://stackoverflow.com/questions/845623/whats-the-best-way-to-encrypt-short-strings-in-net.正如Simon所说(对不起),Base64(例如http://msdn.microsoft.com/en-us/library/dhx0d524.aspx)可用于正确编码cookie中的加密数据. (2认同)