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)
所以要正确解决它,您可能需要查看编码器。希望对您有所帮助!
我在编码数据时遇到问题。我的令牌有 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)
所以要正确解决它,您可能需要查看编码器。希望对您有所帮助!