如何在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
相关产品推荐
相关产品推荐

