У меня есть службы REST (C#/IIS), где небольшое количество данных шифруются с использованием:HttpException при попытке расшифровать данные после .Net 4.5.2 обновления
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 устарели сейчас, но у меня есть существующая система и не могу изменить его в данный момент.)
UPDATE
Это только проблема, когда ключи AutoGenerate. Если я дам им явные значения, все будет работать после обновления.
Возможно, это связано с тем, как ключи автогенерируются. Я просто попробовал такое же обновление, но на этот раз я начал с явных значений для decryptionKey и validationKey вместо AutoGenerate. Из первоначального тестирования видно, что зашифрованные данные перед обновлением могут быть дешифрованы после обновления. – Frogger
Странно. Я бы посоветовал использовать жестко закодированные ключи. Может ли это быть связано с тем, что ASP.NET 4.5.2 теперь игнорирует 'enableViewStateMac = false'? Проверьте это: http://support.microsoft.com/kb/2915218 –
Этот сценарий должен продолжать работать: эти алгоритмы не были изменены после выпуска 4.5. Вы уверены, что, когда значения были первоначально созданы (во время первоначальных вызовов Encode), была установлена рамка 4.5.1 на машине? Могли ли эти зашифрованные значения быть выпущены гораздо раньше - скажем, от 3 или 4 лет назад, задолго до того, как были выпущены версии 4.5 и 4.5.1? – Levi