クッキーで使用している 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);
}
次のテストデータを使用するとき:
Protect()
:
入力: 775119337
出力: (Cookie) "HyV7ShLrb61cm9HWoHl2lUJtGMlMxLn60q27xwl7Ae1wpv31p7sJqfRDD8TMoSR8n8PPN1K7k7LsrjqWH6A-P17OblK3MApsDQRQLa8xj9A1"
UnProtect()
:
出力: "NwA3ADUAMQAxADkAMwAzADcA0"
出力は正しくありませんが、もちろん、入力した元の ID である必要があります。
どのようにすれば クッキーを復号化できるでしょうかMachineKey.UnProtect()
?
ベストアンサー1
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);
}