base64加密出现的问题
发表于|更新于
|浏览量:
背景
项目中仿QQ闪照功能, 图片的发送逻辑是, 先转base64, 然后加密, 最后加密后的字符串作为文件发送; 在处理接收的时候, 按照先下载文件, 然后读取文件内容, 再解密, 然后按照 base64 字符串的方式生成图片, 却一直失败.
解决方法
起初以为是, 加解密的问题, 仔细排查后, 排除了这个假设. 最后把解密后的字符串拷贝到VSCode中仔细观察发现, 其中多了很多\r\n.
搜索后发现, 是base64加密的问题, 由于base64一行不能超过76字符, 超过就会添加回车换行符(在 Windows中是\r\n, 在Linux中是\n). 而解析后其中的回车和换行就是错误信息, 所以解决方法是, 把\r\n替换为空字符串, 然后再去生成图片, 就正常了.
参考
文章作者: 今是昨非
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 今是昨非的博客!
相关推荐
2022-11-22
使用WidgetKit打包出的APP低版本崩溃
背景APP添加了WidgetKit功能,APP最低版本是10.0,用户反馈安装后,打开就闪退,这里记录一下原因: 解决排查后发现用户手机系统版本较老,低于iOS 14,由于手头没有低版本的设备,通过Xcode 12.x添加iOS 10.x模拟器添加了iOS12.0的模拟器,Debug模式下没有问题,但是Release不行,控制台报错类似如下: dyld: Library not loaded: /System/Library/Frameworks/WidgetKit.framework/WidgetKit Referenced from: /private/var/containers/Bundle/Application 搜索后,发现解决方案如下: Select your target Build Phases Link binary with libraries Add WidgetKit and set its Status to “Optional” 参考 Error running app with widgetKit on iOS 13
2018-12-06
Swift代码中的嵌套命名法
Swift代码中的嵌套命名法Swift支持与其他类型嵌套命名,尽管它还没有专用的命名关键词。下面我们来看看,如何使用类型嵌套来优化我们代码的结构。 大多数Swift开发者习惯于用类型在结构上的实际名字累命名。例如:PostTextFormatterOption(一个Text Formatter类型的用于format Posts的Option)。这可能是因为我们在Objective-C & C中,养成的别无选择的可怕命名习惯,被我们带到了Swift里。 下面我们用上面提到的类型作为例子,来看下Post、PostTextFormatter以及PostTextFormatterOption的实现: 123456789101112131415161718192021222324252627struct Post { let id: Int let author: User let title: String let text: String}class PostTextFormatter { private le...
2021-11-22
上传图片失败问题的排查记录
背景最近开发水印相机,遇到了个难缠的问题。这里记录分享一下。 之前上传图片功能的开发,一般都是修改用户头像之类的,所以印象中上传图片,没有什么难处理的,使用 AFNetworking的 formData 进行上传,直接就可以了。但是这次用户大批量使用水印相机后大量反馈上传慢、上传不成功的问题。 排查用户反馈有问题后,开始排查;在用户反馈上传不成功的同一时间,在开发环境和线上环境尝试拍摄上传均可正常上传。 网络问题初步判断是网络问题,由于用户需要在工地现场使用此功能,所以猜测是用户网络环境的问题。建议用户尝试切换网络重新上传。同时让用户使用 SpeedTest.cn测速,发现部分用户月底流量限速网速被限制了,上传网速很低,导致上传不成功。 安全组策略限制然而还是有部分用户,测速显示上传速度28M/s,但是上传依旧超时失败。继续排查后,有同事在测试环境出现了一直上传失败的情况,排查后发现安全组有策略:同一IP单位时间访问请求的数量超出几千次后,当前 IP 会被限制,任何操作都会限制。但是进一步排查后,发现线上因为这个原因被限制的用户并没有太多。 客户端超时继续排查后,发现有用户反...
2022-12-06
部网络货运信息交互系统位置信息插件SDK接入总结
背景APP接入部网络货运信息交互平台,这里记录一下接入想法和过程。 实现iOS SDK提供的方法,共有下面6个 init start send pause restart stop 看起来很简单,但是需要考虑SDK某个方法可能会失败,而且可能会有同一个司机多个托运单、或者同一托运单分段多个司机运输以及托运过程中换车、司机运输中换手机等场景,想要持续记录位置信息,完成完整的一个单据链路就不那么容易了。 而这些场景的处理,需要服务端的协助,但是服务端没有和部网络货运信息平台直接交互的接口,无法直接从货运信息平台读取状态和数据,所以处理就显得麻烦了。 我们的设想是,服务端兜底处理异常,所以,首先要让服务端知道当前处理的单据和步骤,故而需要一个记录接口,每次执行SDK的方法后,成功或失败都同步给服务端。 为了避免出现其他手机或其他用户或后台手动关闭单子的情况,需要服务端提供另一个查询是否有待结束运单的接口,同样,这个接口在每次执行SDK的方法后,都要调用,用于获取是否有待关闭的运单。 而还有一种情况,即用户开始运单后,APP被杀掉了再次打开时,这时候应该执行SDK的什么方法?或者...
2022-04-14
Algorithem_ReverseArray
Algorithem_ReverseArrayGiven an array, rotate the array to the right by k steps, where k is non-negative. Example 1: 12345678Input: nums = [1,2,3,4,5,6,7], k = 3Output: [5,6,7,1,2,3,4]Explanation:rotate 1 steps to the right: [7,1,2,3,4,5,6]rotate 2 steps to the right: [6,7,1,2,3,4,5]rotate 3 steps to the right: [5,6,7,1,2,3,4] Example 2: 1234567Input: nums = [-1,-100,3,99], k = 2Output: [3,99,-1,-100]Explanation: rotate 1 steps to the right: [99,-1,-100,3]rotate 2 steps to the right: [3,9...
2026-01-27
CodeBuddyCN 使用免费的七牛 Model 步骤
背景CodeBuddyCN 支持接入外部 models,参考# models.json 配置指南,而恰好七牛送免费的 token 额度,可用grokCode 和 claude-4.5-sonnet,这里记录下接入步骤。 实现首先下载并安装CodeBuddyCN; 然后打开并领取七牛免费 1000 万Token,注册成功后,打开七牛 API Key界面,然后点击创建 API Key,如下图所示: Mac 上使用 CMD+Shift+G,输入~/.codebuddy/,跳转到对应文件夹,然后新建models.json 文件,内容格式如下,apiKey 改为上面创建的 API Key,注意availableModels留空,可以即用 CodeBuddyCN 自带的,也可以新增的: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808...