Шифрование файлов cookie в ASP.NET
Я хотел бы зашифровать cookies в ASP.NET.
Я следовал методу в этой статье , но у него есть недостаток, который использует reflection во внутреннем методе. Это привело к тому, что оно было помечено в обзоре кода – оно не является надежным для будущего, поскольку внутренняя реализация может измениться.
Есть ли метод с идентичной функциональностью, который не требует использования шифрования для внутренних методов?
- Как безопасно хранить ключи шифрования в java?
- Шифрование / Расшифровка больших файлов (.NET)
- Обработка криптовых исключений
- Самый простой способ шифрования текстового файла в java
- Java - шифрование / дешифрование имени пользователя и пароля из файла конфигурации
Я использую .NET Framework 3.5 SP1 (предположим, что я не могу изменить версии фреймворка)
- Хеширование, соль и хранение хешированных значений
- Шифрование настроек приложения в web.config
- Фундаментальное различие между алгоритмами Hashing и Encryption
- Почему безопасность через неясность - плохая идея?
- Хранение данных кредитной карты
- Как расшифровать зашифрованную строку AES-256 из CryptoJS с помощью Java?
- Какая оптимальная длина для паролей пользователей?
- Как защитить общие настройки Android?
Почему бы просто не использовать шифрование, обнаруженное в 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); }
Вам больше не нужно катиться.
.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.