C# 使用手工加密(ASP.NET)加密Cookie时出现问题
我面临一个奇怪的问题: 我正在加密cookie的内容 当我在VisualStudio中运行时,我的代码工作正常,但给了我一个错误的请求,HTTP错误400。请求的格式不正确。当我从服务器上运行它时 以下是encryption Encrypt Cook.cs的类,位于app_代码中:C# 使用手工加密(ASP.NET)加密Cookie时出现问题,c#,asp.net,C#,Asp.net,我面临一个奇怪的问题: 我正在加密cookie的内容 当我在VisualStudio中运行时,我的代码工作正常,但给了我一个错误的请求,HTTP错误400。请求的格式不正确。当我从服务器上运行它时 以下是encryption Encrypt Cook.cs的类,位于app_代码中: public class EncryptCook { public EncryptCook() { // // TODO: Add constructor logic here // } p
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(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看起来像一个方框字符
谢谢请不要使用自制的加密。这只能以尴尬告终。如果捕获到异常,可能应该重新引用它或返回null,而不是空字符串。该错误可能是因为您所谓的加密正在创建在当前字符集中无效的字节序列。谢谢您的回答。但您能告诉我问题出在哪里吗?我的意思是,它在我的本地计算机上运行正常,但在服务器上运行不正常+1我同意。您可以使用任何其他对称算法使用存储在web.config中的相同私钥对数据进行加密和解密。请确保输出有效数据,为此应使用Base64编码字符串。有关可在.NET中使用的真正对称加密算法,请参阅。正如Simon所说的抱歉,Base64可用于正确编码cookie中的加密数据。我建议您使用URL编码或Base64编码您的密码文本。这样做将确保生成的字符串对HTTP协议有效。请尝试使用IIS在计算机上本地运行该字符串,而不是在Visual Studio development webserver上运行。您可能会出现与服务器相同的错误。