Swift String和base64Encode混淆

时间:2019-07-14 11:34:32

标签: ios swift encode swift5

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

let data = Data(base64Encoded: tokenString)! 

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

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

Data(base64Encoded:)是否对字符长度有限制? 请给我一些有关此问题的信息。

1 个答案:

答案 0 :(得分:2)

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

因此,要正确解决该问题,您可能需要研究编码器。希望有帮助!