CryptoPP против PHP Base64 кодирования / декодирования

Я пытаюсь создать обмен сообщениями между приложениями на PHP и C++ (CryptoPP).

У меня есть следующий код в PHP:

$in = "ALApfWG920ZFle/2r6CkXKXt+zG5tiw7Gw9ZLl1mKRNP9fyb12T92e9rTQF4JeapXSrZVBPyrGx52l4zmu+wr3u2EQW7CeYFbl9h8y5+xx0MPOL/1nyX6ENzo755klTy5AxcM9GMrpKt689i79ouuxceA2bCa0cpWMUv4c2dHN8nKaXDSyCW04dRglFds9CVb29JgQamFRc7H8yjPPdk/FIMDt3xCDOKjoT5VGM1v1Tsyo92qCSFW9N4xXqLr5NUO0hv5u+kVCg0P/gWbgSSNsflXjyqV+dBp3YzKdxHGQXbpl8IQvec95GjL60zQ7IS/rWOZg40+IrwbhvoWHUQIkM="
$out = base64_decode($decode)

Он декодирует текст и возвращает двоичный файл string, как и ожидалось. Я делаю аналогичную команду, используя CryptoPP в C++:

string out;
string in = "ALApfWG920ZFle/2r6CkXKXt+zG5tiw7Gw9ZLl1mKRNP9fyb12T92e9rTQF4JeapXSrZVBPyrGx52l4zmu+wr3u2EQW7CeYFbl9h8y5+xx0MPOL/1nyX6ENzo755klTy5AxcM9GMrpKt689i79ouuxceA2bCa0cpWMUv4c2dHN8nKaXDSyCW04dRglFds9CVb29JgQamFRc7H8yjPPdk/FIMDt3xCDOKjoT5VGM1v1Tsyo92qCSFW9N4xXqLr5NUO0hv5u+kVCg0P/gWbgSSNsflXjyqV+dBp3YzKdxHGQXbpl8IQvec95GjL60zQ7IS/rWOZg40+IrwbhvoWHUQIkM=";
CryptoPP::StringSource decryptor(in, true,
new CryptoPP::Base64Decoder(
new CryptoPP::StringSink(out)
    ));

Тем не менее, когда я проверяю outstring, пусто.

Может ли кто-нибудь определить, что я делаю неправильно?

1 ответ

Решение

Вы не можете видеть двоичные данные, потому что они начинаются с нуля (\0). \0 завершает строку, поэтому вы ничего не видите, но ваши данные сохранены.

Проверьте:

out.size() 

Вы можете получить доступ к своим данным с помощью:

const char* data = out.c_str();
char* firstByte = data[0];
Другие вопросы по тегам