HttpException при попытке расшифровать данные после обновления.Net 4.5.2
У меня есть служба REST (C#/IIS), где небольшое количество данных шифруется с помощью:
var encryptedText = MachineKey.Encode(bytes, MachineKeyProtection.All)
Зашифрованная строка позже публикуется (в службу REST) и декодируется с использованием:
MachineKey.Decode(encryptedText, MachineKeyProtection.All)
MachineKey генерируется автоматически, как показано в файле web.config:
<machineKey
decryption="AES"
decryptionKey="AutoGenerate"
validation="AES"
validationKey="AutoGenerate" />
После того, как система была обновлена с.Net 4.5.1 до 4.5.2, я больше не могу расшифровывать строку, которая была зашифрована перед обновлением; выдает HttpException "Невозможно проверить данные". (Я могу расшифровать строку, зашифрованную после обновления.)
Таким образом, что-то изменилось между 4.5.1 и 4.5.2 в алгоритме, что делает их несовместимыми. Я не смог найти в Интернете ничего об этой конкретной проблеме. У кого-нибудь есть конкретные детали по этому вопросу и / или обходные пути, чтобы заставить его работать?
Если это имеет значение, проект нацелен на .Net 4.0, а не на 4.5 или 4.5.1 или 4.5.2.
(Помимо этого, звучит так, как будто не рекомендуется использовать MachineKey.Encode/Decode для чего-либо кроме кратковременного шифрования, возможного из-за такого рода проблем? Кроме того, я знаю, что Encode / Decode устарела, но я иметь существующую систему и не может изменить ее в данный момент.)
ОБНОВИТЬ
Это проблема только тогда, когда ключи имеют автогенерацию. Если я даю им явные значения, после обновления все продолжает работать нормально.
1 ответ
Одна вещь, которую я заметил, это загрузить настройки профиля пользователя в пуле приложений IIS. Если он отключен для совместимости с IIS 6, MachineKey.Decode не сможет расшифровать данные при каждой перезапуске пула приложений. Для моих собственных тестов кажется, что от этого страдают только устаревшие методы Encode/Decode и то же самое при использовании MachineKeyProtection.All. Они отлично работают с MachineKeyProtection.Encryption.