2009-09-12 30 views
-5

私はbase64でエンコードされた文字列をopensslでデコードしようとしています。ただし、5のうち4回しか動作しません。Base64のデコード - 不正な文字列の長さ

デコードされた文字列は、常に64文字の長さにする必要があります。 BIO_read()は常に64を返します。ただし、返されるバッファが64より短いこともあります。

何が間違っていますか?どのように私はいつも正しい文字列を得ることができますか?

+0

"返されたバッファ"とはどういう意味ですか?バッファ*をBIO_readに渡します。サンプルコードが役に立ちます。 –

+0

私はBIO_readが宛先に何を入れるのかを意味します。 とにかく、私は自分の問題をシングルキャラクターに追跡しました。 BIO_readが終端と同じcharを返すことがあるようです。それは文字列を殺す... – Mantas

答えて

4

あなたはstr [n] cpyを使用していますか?できません! Base64でエンコードされたデータには、C文字列処理関数がend-of-stringとして解釈するヌル文字を含めることができます。

strcmpの代わりにstr [n] cpy、memcmpの代わりにmemcpyを使用します。これらの関数ではデータサイズを知る必要がありますが、となります。

また、Cスタイルの文字列などについてあまり自信がない場合は、ここでそのトピックに関する豊富な情報があります。

+0

ありがとう!!!それはパズルの欠落部分でした。 – Mantas

+0

Hmmmは、印刷可能な文字(a-z、A-Z、0-9、 '+'および '/' [および '='埋め込み])で完全に構成されたbase64でエンコードされたデータではありませんか? – pmg

+1

Base64でエンコードされたデータ(Base64デコード時に戻ってくるもの)で、データのBase64エンコード形式ではありません。 – Artelius

関連する問題