c# - ¿Cómo usar MachineKey.Protect para una cookie?
cookies asp.net-4.5 (1)
decodedValue
son los bytes que decodedValue
a MachineKey.Protect()
.
Esto no es UrlTokenEncoded; Es bytes codificados en Unicode.
Encoding.Unicode.GetString()
llamar a Encoding.Unicode.GetString()
.
Desde el 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);
}
Quiero cifrar la identificación que estoy usando en una cookie. Estoy usando ASP.NET 4.5, así que quiero usar MachineKey.Protect
para hacerlo.
Código
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);
}
Cuando uso los siguientes datos de prueba:
Protect()
:
Entrada: 775119337
Salida: (Cookie) "HyV7ShLrb61cm9HWoHl2lUJtGMlMxLn60q27xwl7Ae1wpv31p7sJqfRDD8TMoSR8n8PN1K7k7LsrjqWH6A-P17OblK3k8PQPQGV2
UnProtect()
:
Salida: "NwA3ADUAMQAxADkAMwAzADcA0"
La salida no es correcta, por supuesto, debe ser la entrada ID original.
¿Cómo consigo descifrar la cookie usando MachineKey.UnProtect()
?