Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift字符串和BASE64编码混淆_Ios_Swift_Encode_Swift5 - Fatal编程技术网

Ios Swift字符串和BASE64编码混淆

Ios Swift字符串和BASE64编码混淆,ios,swift,encode,swift5,Ios,Swift,Encode,Swift5,我对数据编码有问题。我的令牌有1228个字符和 let data = Data(base64Encoded: tokenString)! 工作正常,但当我向令牌添加一些信息时,我的令牌有1263个字符数据(base64Encoded:)返回nil 我认为问题在于字符串长度或数据(base64Encoded:) 数据(base64Encoded:)对字符长度有任何限制吗? 请提供有关此问题的一些信息。不确定如何对修改后的令牌进行编码,但编码的Base64字符串似乎不包含字符。将=添加到修改的令

我对数据编码有问题。我的令牌有1228个字符和

let data = Data(base64Encoded: tokenString)! 
工作正常,但当我向令牌添加一些信息时,我的令牌有1263个字符
数据(base64Encoded:)
返回nil

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

数据(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)

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

如何向令牌“添加一些信息”?如果您只是向其附加另一个字符串,它可能不再是有效的base64字符串,因此
Data(base64Encoded:)
将返回nil。我使用JWT令牌并向有效负载添加一些数据:Data如果您共享代码,显示令牌是什么以及用于添加数据的代码,可能会有所帮助。让数据=Data(base64Encoded:“EYJZWIOIIXMJ0NTY3ODKWIBMFTZSIKPVAG4GRG9LIIWIAW0IJOXNTE2M5MDIYMTF9”)!工作正常,但让数据=数据(Base64编码:“EYJZWIOIIXMJ0NTY3ODKWIBMFTZSIKPVAG4GRG9LIWIWF0IJOXNTE2M5MDIYMMX0”)!return nil问题是字符串长度。base64Encode可能必须有多个4。为什么?请告诉我或链接有关此问题的文章Yep,可能是一个编码问题。评论太多,因此作为答案发布,即使编码失败的问题仍然存在:-)此解决方案看起来不优雅。是否还有其他解决方案?如因此,最好的选择是检查令牌是如何编码为Base64的,以及为什么结果不包含填充。