2014-09-08 2 views
1

У меня есть службы 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. Если я дам им явные значения, все будет работать после обновления.

+0

Возможно, это связано с тем, как ключи автогенерируются. Я просто попробовал такое же обновление, но на этот раз я начал с явных значений для decryptionKey и validationKey вместо AutoGenerate. Из первоначального тестирования видно, что зашифрованные данные перед обновлением могут быть дешифрованы после обновления. – Frogger

+0

Странно. Я бы посоветовал использовать жестко закодированные ключи. Может ли это быть связано с тем, что ASP.NET 4.5.2 теперь игнорирует 'enableViewStateMac = false'? Проверьте это: http://support.microsoft.com/kb/2915218 –

+0

Этот сценарий должен продолжать работать: эти алгоритмы не были изменены после выпуска 4.5. Вы уверены, что, когда значения были первоначально созданы (во время первоначальных вызовов Encode), была установлена ​​рамка 4.5.1 на машине? Могли ли эти зашифрованные значения быть выпущены гораздо раньше - скажем, от 3 или 4 лет назад, задолго до того, как были выпущены версии 4.5 и 4.5.1? – Levi

ответ

0

Одна вещь, которую я заметил, это загрузить параметры профиля пользователя в пуле приложений IIS. Если вы отключили его для совместимости с IIS 6, MachineKey.Decode не может расшифровывать данные каждый раз, когда пул приложений перерабатывается. Для моих собственных тестов кажется, что от него страдают только устаревшие методы кодирования/декодирования, а также при использовании MachineKeyProtection.All. Они отлично работают с MachineKeyProtection.Encryption.

Смежные вопросы