Шифрование файлов cookie в ASP.NET
Я хотел бы зашифровать файлы cookie в ASP.NET.
Я следил за методом в этой статье, но имеет недостаток, который использует отражение во внутреннем методе. Это привело к тому, что оно было помечено в обзоре кода - оно не является надежным для будущего, поскольку внутренняя реализация может измениться.
Есть ли метод с одинаковой функциональностью, который не требует использования шифрования для внутренних методов?
Я использую .NET Framework 3.5 SP1 (предположим, что я не могу изменить версии фреймворка)
Ответы
Ответ 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.