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.

Другие вопросы по тегам