Swift String 和 base64Encode 混淆

Swift String and base64Encode Confusion

我在编码数据时遇到问题。我的令牌有 1228 个字符和

let data = Data(base64Encoded: tokenString)! 

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

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

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

不确定您如何对修改后的标记进行编码,但看起来编码后的 Base64 字符串不包含 padding 个字符。将 = 附加到修改后的标记似乎可以解决解码问题:

// 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)

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