Windows 2000上でRC2 アルゴリズムを互換にする方法
Windows XPにSP1以上を適用した場合、CALG_RC2 の暗号RC2 セッション キーの長さが 40bitから128bitになります。そのため、Windows 2000と XPの間で暗号・復号に互換性がなくなってしまいます。
そのため、0x80090005 (Bad Data/データが不正です)となってしまいます。
DWORD dwData = 128; if (CryptDeriveKey(hProv, CALG_RC2, hHash, CRYPT_EXPORTABLE, &hKey)) { if(CryptSetKeyParam(hKey,KP_EFFECTIVE_KEYLEN,(LPBYTE)&dwData,0)){ if(CryptDecrypt(hKey, 0, TRUE, 0, buf, &sz)){ // 正規の処理 } } CryptDestroyKey(hKey); } |
こんな感じで、明示的に 128bit に指定してやればよいです。
Comments