Я пытаюсь эмулировать работающую процедуру шифрования / дешифрования CryptoAPI RC4 в PHP. При этом я столкнулся с проблемой при попытке воссоздать процесс CryptCreateHash + CryptHashData. Я пытаюсь выяснить, как CryptoAPI упорядочивает / комбинирует необработанные данные при многократном вызове CryptHashData.
Я попытался соединить два входных значения с ключом различными способами, а также изменить порядок следования байтов, но я не уверен, как эмулировать точные шаги, которые выполняет 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);
Поэтому вопрос состоит в том, как эмулировать этот шаг и сопоставить хеш-ключ C5 CryptoApi MD5 в php. Мне не удалось расшифровать с помощью этого ключа или сопоставить ключ php с экспортированным ключом C ++.
Задача ещё не решена.
Других решений пока нет …