Cookie に MachineKey.Protect を使用するにはどうすればいいですか? 質問する

Cookie に MachineKey.Protect を使用するにはどうすればいいですか? 質問する

クッキーで使用している 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);
}

おすすめ記事