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 に指定してやればよいです。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です