Dav*_*vid 24 c# cookies asp.net-4.5
我想加密我在cookie中使用的ID.我正在使用ASP.NET 4.5,所以我想用MachineKey.Protect它来做.
public static string Protect(string text, string purpose)
{
if (string.IsNullOrEmpty(text))
return string.Empty;
byte[] stream = Encoding.Unicode.GetBytes(text);
byte[] encodedValue = MachineKey.Protect(stream, purpose);
return HttpServerUtility.UrlTokenEncode(encodedValue);
}
public static string Unprotect(string text, string purpose)
{
if (string.IsNullOrEmpty(text))
return string.Empty;
byte[] stream = HttpServerUtility.UrlTokenDecode(text);
byte[] decodedValue = MachineKey.Unprotect(stream, purpose);
return HttpServerUtility.UrlTokenEncode(decodedValue);
}
Run Code Online (Sandbox Code Playgroud)
当我使用以下测试数据时:
Protect():
输入:775119337
输出:(饼干) "HyV7ShLrb61cm9HWoHl2lUJtGMlMxLn60q27xwl7Ae1wpv31p7sJqfRDD8TMoSR8n8PPN1K7k7LsrjqWH6A-P17OblK3MApsDQRQLa8xj9A1"
UnProtect():
输出:"NwA3ADUAMQAxADkAMwAzADcA0"
输出不正确,当然,它应该是原始ID I输入.
如何使用解密cookie MachineKey.UnProtect()?
SLa*_*aks 45
decodedValue是您传递给的字节数MachineKey.Protect().
这不是UrlTokenEncoded; 它是Unicode编码的字节.
你需要打电话Encoding.Unicode.GetString().
来自OP:
public static string Protect(string text, string purpose)
{
if (string.IsNullOrEmpty(text))
return null;
byte[] stream = Encoding.UTF8.GetBytes(text);
byte[] encodedValue = MachineKey.Protect(stream, purpose);
return HttpServerUtility.UrlTokenEncode(encodedValue);
}
public static string Unprotect(string text, string purpose)
{
if (string.IsNullOrEmpty(text))
return null;
byte[] stream = HttpServerUtility.UrlTokenDecode(text);
byte[] decodedValue = MachineKey.Unprotect(stream, purpose);
return Encoding.UTF8.GetString(decodedValue);
}
Run Code Online (Sandbox Code Playgroud)