Base64 解码 - 不正确的字符串长度
Posted
技术标签:
【中文标题】Base64 解码 - 不正确的字符串长度【英文标题】:Base64 decoding - incorrect string length 【发布时间】:2010-11-27 17:42:51 【问题描述】:我正在尝试使用 openssl 解码 base64 编码的字符串。但是,它在 5 次中只工作 4 次。
解码后的字符串应始终为 64 个字符长。 BIO_read() 总是返回 64。但是,有时返回的缓冲区小于 64!
任何想法有什么问题吗?我怎样才能总是得到正确的字符串?
【问题讨论】:
“返回的缓冲区”是什么意思?您将缓冲区传入 BIO_read。示例代码会有所帮助。 我的意思是 BIO_read 放入目的地。无论如何,我将我的问题追溯到单个字符。看起来有时 BIO_read 返回与终止相同的字符。这会杀死字符串... 【参考方案1】:你在使用 str[n]cpy 吗?你不能! Base64 编码的数据可以包含空字符,C 字符串处理函数将其解释为字符串结尾。
使用 memcpy 代替 str[n]cpy、memcmp 代替 strcmp 等。这些函数需要您知道自己的数据大小,但我相信您确实知道。
此外,如果您对 C 风格的字符串等不是很有信心,这里还有很多关于该主题的信息。
【讨论】:
嗯,base64 编码的数据不是完全由可打印字符(az、AZ、0-9、'+' 和'/' [和'=' 用于填充])组成的吗? 我指的是编码为 Base64 的数据(即 Base64 解码时返回的数据),而不是 Base64 编码形式的数据。以上是关于Base64 解码 - 不正确的字符串长度的主要内容,如果未能解决你的问题,请参考以下文章
使用Javascript的atob解码base64不能正确解码utf-8字符串
如何解码 base64 字符串并获取正确的字符,包括重音符号?