2017-03-21 15 views
2

PHPとC++(CryptoPP)のアプリケーション間の通信交換を作成しようとしています。CryptoPP vs 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のかASANを通して、あなたのコードを実行しましたか? –

+0

こんにちは@KerrekSB、C++のコードはCryptoPPの例から抜粋していますので、チェックする必要はあまりありません。それは入力文字列と関係がありますが、私はそれが何であるか分かりません。それは他の入力文字列で結果を与える。 –

+0

OKです。 –

答えて

3

バイナリデータがゼロ(\ 0)で始まるため、バイナリデータは表示されません。 \ 0は文字列を終了するので、何も表示されませんが、データは保存されます。

チェック:

out.size() 

あなたがして、あなたのデータにアクセスすることができます。

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

ありがとうございました。VSの 'Immediate'ウィンドウに文字列を表示すると、トリックがかかりました。私は文字列が最初に\ 0ターミネータを持っていなかったので、マウスオーバー時にデバッガに文字列が少なくとも部分的に見えることを見落としました。 –

関連する問題