背景#
项目中仿 QQ 闪照功能,图片的发送逻辑是,先转 base64, 然后加密,最后加密后的字符串作为文件发送;在处理接收的时候,按照先下载文件,然后读取文件内容,再解密,然后按照 base64 字符串的方式生成图片,却一直失败.
解决方法#
起初以为是,加解密的问题,仔细排查后,排除了这个假设。最后把解密后的字符串拷贝到 VSCode 中仔细观察发现,其中多了很多\r\n
.
搜索后发现,是 base64 加密的问题,由于 base64 一行不能超过 76 字符,超过就会添加回车换行符 (在 Windows 中是\r\n
, 在 Linux 中是\n
). 而解析后其中的回车和换行就是错误信息,所以解决方法是,把\r\n
替换为空字符串,然后再去生成图片,就正常了.