2017-03-21 5 views
2

PHP와 C++ (CryptoPP)의 응용 프로그램간에 통신 교환을 만들려고합니다.CryptoPP 대 PHP Base64 인코딩/디코딩

나는 PHP에 다음 코드를 가지고 :

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

그것은 텍스트를 디코딩하고 예상대로, 이진 string을 반환합니다. 나 C++로 CryptoPP를 사용하여 유사한 명령을하고있는 중이 야 : 나는 outstring을 검사 할 때, 그러나

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) 
    )); 

를, 그것은 비어 있습니다.

누군가 내가 잘못하고있는 것을 지적 할 수 있습니까?

+0

당신이 Valgrind의 또는 아산을 통해 코드를 실행 했습니까? –

+0

안녕하세요 @KerrekSB, C++ 코드는 CryptoPP 예제에서 가져온 것이므로 확인할 것이 많지 않습니다. 그것은 입력 문자열과 관련이 있지만 그것이 무엇인지는 잘 모르겠습니다. 다른 입력 문자열과 함께 결과를 제공합니다. –

+0

좋습니다. –

답변

3

이진 데이터는 0으로 시작하기 때문에 볼 수 없습니다 (\ 0). \ 0은 문자열을 종료하므로 아무 것도 볼 수 없지만 데이터는 저장됩니다.

확인 :

out.size() 

당신은 당신의 데이터에 액세스 할 수 있습니다 :

const char* data = out.c_str(); 
char* firstByte = data[0]; 
+0

대단히 고마워요 - VS에서 '즉시'창에 문자열을 표시하는 것이 트릭을 만들었습니다. 필자는 처음부터 \ 0 터미네이터가 없기 때문에 문자열이 디버거에서 부분적으로 표시되는 것을 간과했다 (마우스 오버시). –