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 现在已弃用,但我已有系统,此时无法更改。)

更新

只有当键是自动生成时,这才是问题。如果我给他们明确的值,升级后一切都会继续正常工作。

4

1 回答 1

0

我注意到的一件事是在 IIS 应用程序池中加载用户配置文件设置。如果您为 IIS 6 兼容性禁用它,则 MachineKey.Decode 每次应用程序池回收时都无法解密数据。对于我自己的测试,似乎只有过时的编码/解码方法会受到影响,使用 MachineKeyProtection.All 时也会受到影响。它们与 MachineKeyProtection.Encryption 配合得很好。

于 2015-11-12T11:47:41.800 回答