c ++ — RC4 CryptoAPI для порта PHP

Я пытаюсь эмулировать работающую процедуру шифрования / дешифрования 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 ++.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …