You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift中从Base64编码公钥获取DER格式公钥?

Swift 从Base64编码公钥提取DER格式数据

这里分两种常见场景给出实现方案:

场景1:Base64字符串带PEM头尾标记

很多公开的公钥会以PEM格式提供,也就是在Base64内容前后加上-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----标记,还可能夹杂换行符。这种情况需要先清理这些冗余内容,再解码:

import Foundation

func derDataFromPEMBase64(_ base64Str: String) -> Data? {
    // 移除PEM标记、换行符,清理首尾空白
    let cleanedStr = base64Str
        .replacingOccurrences(of: "-----BEGIN PUBLIC KEY-----", with: "")
        .replacingOccurrences(of: "-----END PUBLIC KEY-----", with: "")
        .replacingOccurrences(of: "\n", with: "")
        .trimmingCharacters(in: .whitespacesAndNewlines)
    
    return Data(base64Encoded: cleanedStr)
}

// 调用示例
let pemBase64 = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx...\n-----END PUBLIC KEY-----"
if let derData = derDataFromPEMBase64(pemBase64) {
    print("DER格式公钥已获取,字节数:\(derData.count)")
} else {
    print("解码失败,请检查输入的Base64字符串格式")
}

场景2:Base64字符串是纯DER的直接编码

如果你的Base64已经是DER数据直接编码的结果(没有PEM标记),直接解码就行:

import Foundation

func derDataFromRawBase64(_ base64Str: String) -> Data? {
    return Data(base64Encoded: base64Str)
}

// 调用示例
let rawBase64 = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx..."
if let derData = derDataFromRawBase64(rawBase64) {
    print("DER格式公钥已获取,字节数:\(derData.count)")
} else {
    print("解码失败,请检查输入的Base64字符串格式")
}

验证方法

如果想确认得到的DER数据是否有效,可以把derData写入文件(比如命名为public_key.der),然后用OpenSSL命令验证:

openssl x509 -inform der -in public_key.der -text

如果能正常输出公钥的详细信息,说明格式正确。

内容的提问来源于stack exchange,提问作者ahad alam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:42:44