2009-09-12 123 views
-5

我试图用openssl解码base64编码的字符串。但是,它只能工作5次,只能工作4次。Base64解码 - 不正确的字符串长度

解码的字符串应该总是64个字符长。 BIO_read()总是返回64.但是,有时返回的缓冲区比64短!

任何想法是什么错?我怎样才能得到正确的字符串?

+0

你是什么意思的“返回的缓冲区”?您将缓冲区*传递给* BIO_read。示例代码将有所帮助。 – 2009-09-12 10:31:45

+0

我的意思是BIO_read放入目的地。 无论如何,我追踪我的问题到单个字符。它看起来像有时BIO_read返回与终止相同的字符。并杀死字符串... – Mantas 2009-09-12 10:42:18

回答

4

你使用str [n] cpy吗?你不能! Base64编码数据可以包含空字符,C字符串处理函数将其解释为字符串结束。

使用memcpy代替str [n] cpy,memcmp代替strcmp等。这些函数需要你知道你的数据大小,但我相信你知道知道了。

另外,如果你对C风格的字符串等不太自信,那么这里有大量关于该主题的信息。

+0

谢谢!这是这个难题的缺失部分。 – Mantas 2009-09-12 12:26:45

+0

嗯,不是base64编码完全由可打印字符(a-z,A-Z,0-9,'+'和'/'[和'='填充])组成的数据吗? – pmg 2009-09-12 12:42:14

+1

我指的是以Base64编码的数据(即Base64解码时获得的数据),而不是数据的Base64编码形式。 – Artelius 2009-09-12 13:07:07