gpt4 book ai didi

ios - 在 Swift 中解码 JSON Web token

转载 作者:行者123 更新时间:2023-11-30 11:52:49 26 4
gpt4 key购买 nike

尝试在 Swift 中解码 JWT 有效负载,但遇到了非常困难的时期

static func decodePayload(tokenstr: String) {

//splitting JWT to extract payload
let arr = split(tokenstr) {$0 == "."}

//base64 encoded string i want to decode
let base64String = arr[1] as String
println(base64String) //eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0

//attempting to convert base64 string to nsdata
let nsdata: NSData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

//decoding fails because nsdata unwraps as nil
let base64Decoded: NSString = NSString(data: nsdata!, encoding: NSUTF8StringEncoding)!


}

最佳答案

eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0

不是有效的 Base64 编码字符串,因为它的长度不是 4 的倍数。某些 Base64 解码器可以容忍此错误,但是NSData 方法则不然。

所以这实际上是服务器端创建的错误Base64 编码的字符串。如有必要,您可以在应用程序中修复它 通过使用 = 字符添加所需的填充(针对 Swift 2 更新代码):

var base64String = arr[1] as String
if base64String.characters.count % 4 != 0 {
let padlen = 4 - base64String.characters.count % 4
base64String += String(count: padlen, repeatedValue: Character("="))
}

现在解码按预期工作:

if let data = NSData(base64EncodedString: base64String, options: []),
let str = String(data: data, encoding: NSUTF8StringEncoding) {
print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"}
}
<小时/>

Swift 4:

var base64String = "eyJleHAiOjE0MjY4MjIxNjMsImlkIjoiNTUwYjA3NzM4ODk1NjAwZTk5MDAwMDAxIn0"

if base64String.count % 4 != 0 {
let padlen = 4 - base64String.count % 4
base64String.append(contentsOf: repeatElement("=", count: padlen))
}

if let data = Data(base64Encoded: base64String) ,
let str = String(data: data, encoding: .utf8) {
print(str) // {"exp":1426822163,"id":"550b07738895600e99000001"}
}

关于ios - 在 Swift 中解码 JSON Web token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com