c# cookies asp.net-4.5

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() ?