Я использую mcrypt_encrypt и base64_encode для шифрования данных на php. Я пробовал расшифровать данные на C ++, но безрезультатно. У меня есть логика C ++ Rijndael, которую я использовал в течение многих лет, а также логику base64_decode. Последний декодирует строки, закодированные базовым процессором php base64_encode. Я использую CBC как с php, так и с C ++. Я экспериментировал с разными размерами блоков и т. Д., Но безрезультатно. Любые советы очень оценили.
Это моя тестовая логика:
PHP
$key = "qwertyuiopasdfghjklzxcvbnmqwerty"; $iv = "12345678901234561234567890123456"; $text = "this is the text to encrypt"; $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv); echo base64_encode($crypttext)."<br/>";
C ++
char* base64encode = ".. output from php..."; unsigned char binaryData[256]; int binaryNumBytes; char result[256]; base64_decode(reinterpret_cast<unsigned char*>(base64encode), strlen(base64encode), binaryData, &binaryNumBytes, false); Encryption::Rijndael rijndael; char* key = "qwertyuiopasdfghjklzxcvbnmqwerty"; char* iv = "12345678901234561234567890123456"; rijndael.Init(Encryption::Rijndael::CBC, reinterpret_cast<const char*>(key), 32, 32, reinterpret_cast<const char*>(iv)); rijndael.Decrypt(reinterpret_cast<const char*>(binaryData), reinterpret_cast<char*>(result), 32); cout << result << endl;
EDIT: Если я использую режим ECB, я могу заставить это работать. Существует некоторая проблема с CBC между двумя.
Использование режима ECB – это путь.