MSDNのドキュメントは、意図的にXP SP3でサポートされるべきであるという意味で正しいようですが、そうでない場合は、.NET3.5のバグが原因です。
AesCryptoServiceProviderとSHA256CryptoServiceProviderはどちらも、「Microsoft Enhanced RSA andAESCryptographicProvider」という名前の同じ暗号化サービスを使用します。XPでは、サービスの名前が少し異なります:「MicrosoftEnhanced RSA and AES CryptographicProvider(Prototype)」。AesCryptoServiceProviderのコンストラクターは、次の簡単なチェックを実行します。
string providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider";
if(Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor == 1)
{
providerName = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)";
}
SHAxxxCryptoServiceProviderクラスのコンストラクターは、(プロトタイプ)名をチェックしません。これが、XPで失敗する理由です。もしそうなら、彼らは成功するでしょう。
特定のPCには簡単な回避策があります。レジストリキーHKEY_LOCAL_MACHINE\SOFTWARE \ Microsoft \ Cryptography \ Defaults \ Providerに移動し、「Microsoft Enhanced RSA and AES Cryptographic Provider(Prototype)」という名前のサブキーを見つけて、.regにエクスポートし、この.regを編集して、「(Prototype)」を削除します。その名前から。インポートし直すと、元のキーが(プロトタイプ)なしの新しいキーに同じ内容で複製されます。今後、SHA256CryptoServiceProviderはこのXPSP3マシンで動作します。