当前位置: 首页 > 面试题库 >

将base64URL解码为base64 — Swift

司空高义
2023-03-14
问题内容

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

根据base64url到base64
hJQWHABDBjoPHorYF5xghQ(base64URL)应该是hJQWHABDBjoPHorYF5xghQ==(base64)。这里可能会有更多差异。

没有关于stackoverflow的解决方案。


问题答案:

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

  • 索引62和63使用不同的字符(-_代替+/
  • 无需强制填充=字符以使字符串长度为四的倍数。

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

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

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>
}

为了完整起见,这将是相反的转换:

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
}


 类似资料:
  • 介绍 Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。 使用 String a = "伦家是一个非常长的字符串"; //5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy String encode = Base64.en

  • 我使用下面的脚本从MongoDB中获取JSON文件,对其进行解析,然后将其插入到Oracle表中。 > 该脚本可以正确地将所有值插入到Oracle表中。这包括值Photo,它是一个base64 formate的图像,它比32KB大得多。 表Appery_Photos中的列Photo是CLOB类型,而列DecodedPhoto是BLOB类型。 问题在于行,我用它将CLOB解码为BLOB。函数base

  • 问题内容: 这是我的代码,我不明白为什么解码功能不起作用。 请少有洞察力会很棒。 它给了我:[解码错误-输出不是utf-8] [解码错误-输出不是utf-8] 问题答案: 返回 最大 长度。 此长度对于调整缓冲区大小很有用,但是不会写入缓冲区的一部分,因此将不是有效的UTF-8。 您只需要使用函数返回的实际写入长度即可。

  • Base64编码将二进制数据转换为文本格式,通过通信通道传递,用户可以安全地处理文本。 Base64也称为Privacy enhanced Electronic mail (PEM) ,主要用于电子邮件加密过程。 Python包含一个名为BASE64的模块,它包括两个主要功能,如下所示 - base64.decode(input, output) - 它解码指定的输入值参数,并将解码的输出存储为对

  • new String(..)转字符串的时候是怎么知道 -28, -72, -83 为一组的呢? 是字符编码有什么规则吗?( 0x**---- ,(byte) ** 是负数的就是3个字节一组这样?)

  • 我知道如何编码/解码一个简单的字符串到/从Base64。 也许你们中有人知道更好的解决办法?我可以将FileStream转换成一个字符串,对该字符串进行编码,然后将该字符串转换回FileStream,例如,或者我会怎么做,这样的代码看起来是什么样子的?