本文介绍了将base64URL解码为base64-Swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我还没有找到正确的方法,如何快速将base64URL解码为base64格式.

I haven't found properly way how to decode base64URL to base64 format in swift.

根据 base64指向base64的URL hJQWHABDBjoPHorYF5xghQ(base64URL)应该为hJQWHABDBjoPHorYF5xghQ== (base64).这里可能会有更多差异.

According to base64url to base64 hJQWHABDBjoPHorYF5xghQ(base64URL) should be hJQWHABDBjoPHorYF5xghQ==(base64). Here could be more differences.

没有关于stackoverflow的解决方案.

There are no solutions on stackoverflow.

推荐答案

"base64url"在两个方面与标准Base64编码不同:

"base64url" differs from the standard Base64 encoding in two aspects:

  • 不同的字符用于索引62和63(而-_+/)
  • 没有强制填充以=字符来使字符串长度四个的倍数.
  • different characters are used for index 62 and 63 (- and _ insteadof + and /)
  • no mandatory padding with = characters to make the string lengtha multiple of four.

(比较 https://en.wikipedia.org/wiki/Base64#Variants_summary_table).

这是一个可能的转换函数:

Here is a possible conversion function:

func base64urlToBase64(base64url: String) -> String {
    var base64 = base64url
        .replacingOccurrences(of: "-", with: "+")
        .replacingOccurrences(of: "_", with: "/")
    if base64.characters.count % 4 != 0 {
        base64.append(String(repeating: "=", count: 4 - base64.characters.count % 4))
    }
    return base64
}

示例:

let base64url = "hJQWHABDBjoPHorYF5xghQ"
let base64 = base64urlToBase64(base64url: base64url)
print(base64) // hJQWHABDBjoPHorYF5xghQ==

if let data = Data(base64Encoded: base64) {
    print(data as NSData) // <8494161c 0043063a 0f1e8ad8 179c6085>
}

出于完整性考虑,这是相反的转换:

For the sake of completeness, this would be the opposite conversion:

func base64ToBase64url(base64: String) -> String {
    let base64url = base64
        .replacingOccurrences(of: "+", with: "-")
        .replacingOccurrences(of: "/", with: "_")
        .replacingOccurrences(of: "=", with: "")
    return base64url
}


针对Swift 4的更新:

func base64urlToBase64(base64url: String) -> String {
    var base64 = base64url
        .replacingOccurrences(of: "-", with: "+")
        .replacingOccurrences(of: "_", with: "/")
    if base64.count % 4 != 0 {
        base64.append(String(repeating: "=", count: 4 - base64.count % 4))
    }
    return base64
}

这篇关于将base64URL解码为base64-Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-13 08:58