base64加密出现的问题
发表于|更新于
|浏览量:
背景
项目中仿QQ闪照功能, 图片的发送逻辑是, 先转base64, 然后加密, 最后加密后的字符串作为文件发送; 在处理接收的时候, 按照先下载文件, 然后读取文件内容, 再解密, 然后按照 base64 字符串的方式生成图片, 却一直失败.
解决方法
起初以为是, 加解密的问题, 仔细排查后, 排除了这个假设. 最后把解密后的字符串拷贝到VSCode中仔细观察发现, 其中多了很多\r\n.
搜索后发现, 是base64加密的问题, 由于base64一行不能超过76字符, 超过就会添加回车换行符(在 Windows中是\r\n, 在Linux中是\n). 而解析后其中的回车和换行就是错误信息, 所以解决方法是, 把\r\n替换为空字符串, 然后再去生成图片, 就正常了.
参考
文章作者: 今是昨非
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 今是昨非的博客!
相关推荐
2015-11-17
iOS开发知识点2——登陆界面
iOS开发知识点2——登陆界面 按钮的实时响应:登陆的时候,需要当用户有输入时按钮才能响应(可点击),如果有一个输入框为空,则按钮不可响应。以前我以为用的是textfield的代理方法直接判断,后来发现那样不好。有另一种方法 12345678910111213141516171819// 首先给textfield添加addTarget方法,注意最后的controlEvents是EditingChanged[self.accountTextField addTarget:self action:@selector(handleTextDidChange:) forControlEvents:UIControlEventEditingChanged];[self.passwordTextField addTarget:self action:@selector(handleTextDidChange:) forControlEvents:UIControlEventEditingChanged];// 然后实现这个方法- (void)handleTextDidChange:(i...
2023-03-02
玩转OpenAI和ChatGpt
背景之前在其他平台就看到有大佬分享自己的ChatGPT的使用, 比如: 自力hzlzh, 但一直也没弄. 昨天突然看到 OpenAI 在商店有很多应用, 下载了一个发现里面接口都是失败的, 但是界面和方向感觉很有意思, 打算自己做一个自用的. 注册 OpenAI注册过程参考超详细注册OpenAI接口账号的教程, 很详细, 按照步骤一步步来即可, 要注意的国内的手机号收不到验证码, 所以需要国外的手机号或者通过接码平台(需付费), 验证码的接收我选用的US的手机号, 花费了 7.1元, 一次就成功了. 简单的说: 首先要能打开openAI的注册页面, 然后注册, 到接收验证码界面 如果有国外的手机号, 直接输入, 接收验证码; 如果没有, 再去注册一个接码平台, 选择语言为中文, 然后就都能看懂了, 然后充值 1 美元, 可以用支付宝支付, 然后搜索openai的接码, 选择一个, 耐心等待, 收到分配的号码之后 再去openAI的验证码界面, 输入分配的号码, 发送验证码, 然后等待, 在接码平台就会显示收到的验证码, 输入就可以注册成功. 如何使用OpenAI注册完...
2023-06-07
如何开发一个 Safari 插件
背景由于常用浏览器是Safari,而 Safari 浏览器的插件比不上 Chrome,所以就有了自己开发常用的 Safari 插件的想法。 打算开发当前页面生成二维码的 Extension,因为网络原因,AirDrop 有时候搜不到手机,所以有了这个需求,而且打算这个也比较简单,所以从这个开始。 调研苹果的官方文档safari_web_extensions给出了步骤,看了好几遍,还是不知道如何下手。虽然新建项目的时候苹果帮忙把框架已经都建好了,但是还是有疑惑,疑惑的点在于: 主APP的作用是什么? Extension的作用是什么? 代码应该写在哪里? manifest.json支持的配置项有哪些,哪里可以看到,应该设置哪些? content.js、background.js分别是干什么用的,什么时候用? popup.html、popup.css、popup.js 又是指的哪部分? content.js、background.js、popup.js中操作 tab 的方法有哪些?哪里可以看到? 这些疑惑一度导致开发计划搁浅,因为没有文章来解释这些问题。于是转而去 Githu...
2023-04-14
iOS16.4 Webview 不能用Safari调试
背景Xcode 升级到 14.3后,模拟器是iOS 16.4 的,想通过Safari -> Developer -> Web Inspector查看,结果发现查看不了 修改一开始以为是设置 Safari 中 Advanced没开启,去查看后,发现开关已开启。 搜索后发现,从 iOS16.4 之后,如果想要通过Web Inspector查看,需要设置如下代码: 12345if #available(iOS 16.4, *) { webView.isInspectable = true} else { // Fallback on earlier versions} 设置之后,重新运行,再通过 Safari 查看,就可以看到了。 参考 Mark the webview as inspectable in iOS 16.4
2024-03-13
Xcode 15.3 Archive失败
Xcode 15.3 Archive失败背景昨晚升级 Xcode 到 15.3,今天打包的时候发现 Archive 失败,提示:Call parameter type does not match function signature!,仔细看报错里是和HandyJSON相关的提示。 解决起初以为和 Pod 库有关系,但是找同事确认后,发现低于 Xcode 15.3 的版本是可以打包成功的,但是 Xcode 15.3 的版本就报错了。然后搜索HandyJSON Call parameter type does not match function signature!,发现了这个,Building HandyJSON in Swift 5.10 throws a fatal error ,是Swift 5.10 编译 HandyJSON报错了。目前HandyJSON官方还未解决。 暂时的解决方法是: 在 Pod 的 Target 中找到 HandyJSON, 然后设置Optimization Level为 None和No Optimization,如下图: 然后再次尝试 A...
2016-01-07
MagicalRecord的使用
创建数据库1. 首先分析清楚自己需要什么 我的目的是要缓存信件列表界面,新建列表界面的model就是letter,所以我需要一个Letter的实体(entity),那这个Letter有哪些属性呢?写信的人(sender)、信的内容(content)、信的时间(dateString)、信的已读未读状态(isRead)、发信还是收信(incoming);所以我Letter的entity创建之后是这样: 这样就好了吗,并没有,如果是普通的展示界面,只有letter的实体,这样就足够了;但是对于我的这个项目来说,是展示信件的,是比较私人的,我缓存的信件列表应该只有我能看到,如果别人在我的手机上登陆了呢?因为我没有做区分,所以,当他登入的时候,他能看到我的数据,因为数据是缓存在手机上的! 所以,我需要一个User的Entity,这个User的Entity的目的是:跟Letter绑定,保证每个人都看到自己应该看到的;user有两个attribute:accout和writeName,(正常情况下应该是uid,但是我的这个是比较简单,所以没有uid); 紧接着问题是,Let...
公告
This is my Blog