2

以下を使用して少量のデータを暗号化する REST サービス (C#/IIS) があります。

var encryptedText = MachineKey.Encode(bytes, MachineKeyProtection.All)

暗号化された文字列は後で (REST サービスに) 送信され、次を使用してデコードされます。

MachineKey.Decode(encryptedText, MachineKeyProtection.All)

web.config に示すように、MachineKey は自動生成されます。

    <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 が現在廃止されていることは知っていますが、私は既存のシステムがあり、現時点では変更できません。)

アップデート

これは、キーが AutoGenerate の場合にのみ問題になります。明示的な値を指定すると、アップグレード後もすべてが正常に機能します。

4

1 に答える 1

0

私が気づいたことの 1 つは、IIS アプリケーション プールでのユーザー プロファイル設定の読み込みです。IIS 6 との互換性のために無効にしている場合、MachineKey.Decode は、アプリ プールがリサイクルされるたびにデータの復号化に失敗します。私自身のテストでは、廃止された Encode/Decode メソッドだけが影響を受けているようで、MachineKeyProtection.All を使用している場合も同様です。MachineKeyProtection.Encryption で問題なく動作します。

于 2015-11-12T11:47:41.800 に答える