ios - Swift String 和 base64Encode 混淆
问题描述
我有编码数据的问题。我的令牌有 1228 个字符,并且
let data = Data(base64Encoded: tokenString)!
工作正常,但是当我向令牌添加一些信息并且我的令牌有 1263 个字符Data(base64Encoded:)
时返回 nil。
我认为问题在于字符串长度或Data(base64Encoded:)
.
Data(base64Encoded:)
对字符长度有什么限制吗?请给我一些关于这个问题的信息。
解决方案
不确定如何对修改后的令牌进行编码,但看起来编码后的 Base64 字符串不包含填充字符。附加=
到修改后的令牌似乎可以解决解码问题:
// original token -> 57 bytes
let data1 = Data(base64Encoded: "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyMTF9")
// modified token -> nil
let data2 = Data(base64Encoded: "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyMX0")
// modified token with '=' for padding -> 56 bytes
let data2Fixed = Data(base64Encoded: "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyMX0=")
// decodes correctly: "{"sub":"1234567890","name":"John Doe","iat":15162390221}"
let string = String(data: data2Fixed!, encoding: .utf8)
因此,要正确解决它,您可能需要查看编码器。希望有帮助!
推荐阅读
- algorithm - 表达式的时间复杂度
- typescript - 将打字稿中的多种类型声明为字符串和数组
- xamarin - Xamarin - 不能使用 iOS 模拟器?
- python - Kivy.uix.images 不工作仅返回空白屏幕
- java - 我想在 ACTION_CALL 的帮助下按下我的移动应用程序中的按钮来拨打紧急号码,但我没有。为什么?
- c - 在 c 中的特定字母处拆分用户输入的字符串
- python - .txt.File 中带有 Selenium 的安全 dublets
- java - 如何为 json 模型构建测试数据构建器
- c - 使用 scanf 获取输入
- spring-boot - Spring Boot (kotlin) 循环依赖