首页 > 解决方案 > Swift String 和 base64Encode 混淆

问题描述

我有编码数据的问题。我的令牌有 1228 个字符,并且

let data = Data(base64Encoded: tokenString)! 

工作正常,但是当我向令牌添加一些信息并且我的令牌有 1263 个字符Data(base64Encoded:)时返回 nil。

我认为问题在于字符串长度或Data(base64Encoded:).

Data(base64Encoded:)对字符长度有什么限制吗?请给我一些关于这个问题的信息。

标签: iosswiftencodeswift5

解决方案


不确定如何对修改后的令牌进行编码,但看起来编码后的 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)

因此,要正确解决它,您可能需要查看编码器。希望有帮助!


推荐阅读