Подтвердить что ты не робот

Шифрование файлов cookie в ASP.NET

Я хотел бы зашифровать файлы cookie в ASP.NET.

Я следил за методом в этой статье, но имеет недостаток, который использует отражение во внутреннем методе. Это привело к тому, что оно было помечено в обзоре кода - оно не является надежным для будущего, поскольку внутренняя реализация может измениться.

Есть ли метод с одинаковой функциональностью, который не требует использования шифрования для внутренних методов?

Я использую .NET Framework 3.5 SP1 (предположим, что я не могу изменить версии фреймворка)

4b9b3361

Ответ 1

Почему бы просто не использовать шифрование, обнаруженное в System.Security.Cryptography, чтобы шифровать и расшифровывать имя и значение cookie, когда оно чувствительно? Вы можете написать некоторые служебные функции, чтобы управлять им довольно легко. Примеры функций утилиты:

private static void SetEncryptedCookie(string name, string value)
{
    var encryptName = SomeEncryptionMethod(name);
    Response.Cookies[encryptName].Value = SomeEncryptionMethod(value);
    //set other cookie properties here, expiry &c.
    //Response.Cookies[encryptName].Expires = ...
}

private static string GetEncryptedCookie(string name)
{
    //you'll want some checks/exception handling around this
    return SomeDecryptionMethod(
               Response.Cookies[SomeDecryptionMethod(name)].Value);
}

Ответ 2

Вам больше не нужно катить.

.Net 4.5 имеет MachineKey.Protect() и MachineKey.Unprotect().

System.Web.Security.MachineKey

.Net 4.0 имеет MachineKey.Encode() и MachineKey.Decode(). Вы должны просто установить MachineKeyProtection на "Все". Они теперь устарели, и вы должны использовать более новые, если у вас есть 4.5.

Обратите внимание, что если вы попытаетесь использовать их в чем-то вроде консольного приложения, а не в ASP.Net, он, похоже, генерирует новый ключ при каждом перезапуске приложения. Я только проверял его быстро, но в ILSpy похоже, что он генерирует свои собственные значения по умолчанию, если отсутствует соответствующее app.setting.

Мне не удалось найти эквивалент nonASP.Net.