我正在尝试在PHP中模拟有效的CryptoAPI RC4加密/解密例程。这样做时,尝试重新创建CryptCreateHash + CryptHashData进程时遇到了问题。我试图弄清楚多次调用CryptHashData时CryptoAPI如何排序/合并原始数据。
我试图以不同的方式将两个输入值连接到键,以及反转字节顺序,但是我不确定如何模拟CryptHashData执行的确切步骤。
例如:
// I create the hash variable, then hash a binary string using CryptHashData and then hash a secret using CryptHashData again.
BYTE baKeyRandom[10] = {87,253, ...};
::CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hSaveHash);
::CryptHashData(hSaveHash, baKeyRandom, (DWORD)sizeof(baKeyRandom), 0);
::CryptHashData(hSaveHash, (LPBYTE)T2CW(pszSecret), (DWORD)_tcslen(pszSecret) * sizeof(WCHAR), 0);
Then in PHP I'm trying to do something similar
// server key secret
$secret = 'ABCDEF-G...';
// random byte string
$random = pack('c*', 87,253, ...);
// simple concat does not work to generate an MD5 key
$key = md5($random.$secret);
所以问题是如何模拟此步骤并匹配php中的C ++ CryptoApi MD5哈希密钥,我无法使用此密钥进行解密或将php密钥与C ++导出的密钥进行匹配