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 字符串并获取正确的字符,包括重音符号?

将 .EXE 编码/解码为 Base64

尝试在已用 Java 编码的 JS 中解码 Base64 时出现“要解码的字符串未正确编码”错误

base64特性导致的不等串解码相同

使用 GitHub API 下载文件时解码 base64