当前位置: 首页 > wzjs >正文

淮安网站建设杭州seo优化公司

淮安网站建设,杭州seo优化公司,技术支持:洛阳网站建设,中铁建设门户网登录咋进不去了本文介绍如何在 iOS/macOS 下将私钥加载为 SecKeyRef,涵盖 PEM 格式的 ECC 密钥读取、X9.63 数据构建、以及与 Keychain 的集成。 1. 使用 SecKeyCreateWithData 加载私钥 Apple 提供的 SecKeyCreateWithData 方法可以直接将密钥数据加载为 SecKeyRef 对象。 SecK…

本文介绍如何在 iOS/macOS 下将私钥加载为 SecKeyRef,涵盖 PEM 格式的 ECC 密钥读取、X9.63 数据构建、以及与 Keychain 的集成。


1. 使用 SecKeyCreateWithData 加载私钥

Apple 提供的 SecKeyCreateWithData 方法可以直接将密钥数据加载为 SecKeyRef 对象。

SecKeyRef SecKeyCreateWithData(CFDataRef keyData, CFDictionaryRef attributes, CFErrorRef  _Nullable *error);

文档:SecKeyCreateWithData(::_😃 | Apple Developer Documentation

attributes 必须包含如下 key

  • kSecAttrKeyType:密钥类型,如 ECC、RSA
  • kSecAttrKeyClass:密钥类(公钥/私钥)

keyData 的数据格式

  • ECC 私钥数据应采用 X9.63 格式。
  • RSA 私钥应为 PKCS #1 格式。

详见:SecKeyCopyExternalRepresentation(:😃 | Apple Developer Documentation

X9.63 格式说明

  • ECC 公钥:04 || X || Y
  • ECC 私钥:04 || X || Y || K
    其中 X、Y 为公钥坐标,K 为大端序编码的私钥值,所有字段均为定长,必要时补零。

构建 X9.63 可参考:将加密工具包密钥存储在钥匙串 | 苹果开发者文档


2. PEM 格式转换与读取

2.1 PEM 转 P256

如果你有 PEM 编码的 P256 私钥,可用 CryptoKit 直接解析为 P256 私钥对象:

文档:init(pemRepresentation:) | Apple Developer Documentation

2.2 读取 ECC PEM 密钥为 SecKey

示例代码(Swift):

/// 加载 PEM 证书为 SecKey
/// - Parameter name: PEM 文件名(不含扩展名)
/// - Returns: SecKey 类型值
class func loadECCSecKeyFromPem(_ name: String) -> SecKey? {guard let pemURL = Bundle.main.url(forResource: name, withExtension: "pem") else {return nil}do {let pemStr = try String(contentsOf: pemURL)let p256 = try P256.Signing.PrivateKey(pemRepresentation: pemStr)let attributes: [String: Any] = [kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,kSecAttrKeyClass as String: kSecAttrKeyClassPrivate]// kSecAttrIsPermanent 是否需要存储,默认不存储guard let secKey = SecKeyCreateWithData(p256.x963Representation as CFData,attributes as CFDictionary,nil)else {return nil}return secKey} catch {print(error)return nil}
}

如果需要将 PEM 转换为 X9.63,可先用 CryptoKit 读取后再取其 x963Representation 字节。


3. iOS 端创建 ECC 私钥并存储到 Keychain

如需新建私钥并写入钥匙串,可参考如下 Objective-C 代码:

+ (NSDictionary *)privateKeyParams {return @{(__bridge NSString *) kSecClass : (__bridge NSString *) kSecClassKey,(__bridge NSString *) kSecAttrApplicationLabel : MTRCAKeyChainLabel,// 存入钥匙串时,按需设置属性(__bridge NSString *) kSecAttrKeyClass : (__bridge NSString *) kSecAttrKeyClassSymmetric,};
}
+ (NSDictionary *)privateKeyCreationParams {// 按需设置密钥长度const size_t keySizeInBits = 256;return @{(__bridge NSString *) kSecAttrKeyClass : (__bridge NSString *) kSecAttrKeyClassPrivate,(__bridge NSString *) kSecAttrKeyType : (__bridge NSNumber *) kSecAttrKeyTypeECSECPrimeRandom,(__bridge NSString *) kSecAttrKeySizeInBits : @(keySizeInBits),(__bridge NSString *) kSecAttrIsPermanent : @(NO), // 是否永久保存};
}
/// 创建并存储 ECC 私钥
+ (SecKeyRef)generateCAPrivateKey {NSMutableDictionary *query = [[NSMutableDictionary alloc] initWithDictionary:[MSMatterFabricKeys privateKeyParams]];// 先删除旧密钥,防止添加失败SecItemDelete((__bridge CFDictionaryRef) query);CFErrorRef error = NULL;SecKeyRef key = SecKeyCreateRandomKey((__bridge CFDictionaryRef)[MSMatterFabricKeys privateKeyCreationParams], &error);if (error) {NSLog(@"Could not generate private key: %@", (__bridge NSError *) error);return NULL;}NSData *keyData = (__bridge_transfer NSData *) SecKeyCopyExternalRepresentation(key, &error);if (error) {NSLog(@"Could not get key external representation: %@", (__bridge NSError *) error);CFRelease(key);return NULL;}query[(__bridge NSString *) kSecValueData] = [keyData base64EncodedDataWithOptions:0];OSStatus status = SecItemAdd((__bridge CFDictionaryRef) query, NULL);if (status != errSecSuccess) {NSLog(@"Failed to store private key : %d", status);CFRelease(key);return NULL;}return key;
}

4. 证书直接读取

如需直接读取证书内容,可参考:证书读取方法(CSDN)


5. 相关资源

  • SecKeyCreateWithData | Apple Developer Documentation
  • SecKeyCopyExternalRepresentation | Apple Developer Documentation
  • 将加密工具包密钥存储在钥匙串 | Apple Developer Documentation
  • PEM 转 P256 | Apple Developer Documentation
  • 证书读取方法(CSDN)

http://www.dtcms.com/wzjs/6878.html

相关文章:

  • 北京朝阳区网站建设汕头网站建设平台
  • 专业网站建设设计装饰中国去中心化搜索引擎
  • 惠州做网站 百度优化网站推广的优化
  • 网站后台样式模板色盲悖论
  • discuz门户网站模板手机关键词查询的分析网站
  • 网站建设补充协议网络优化的流程
  • 网站制作的核心要点是什么下拉框关键词软件
  • 大连网站制作需要多少钱百度官网首页登录
  • 湖南做网站 e磐石网络seo推广沧州公司电话
  • 制作简历的免费模板网站今天新闻头条最新消息
  • 五金批发网站怎么做什么是互联网营销师
  • 天猫网站怎么做搜索引擎优化百度
  • 网站页面建设方案书模板上海搜索排名优化公司
  • 定制搭建网站长沙网站快速排名提升
  • 网站设计建设百度推广方案
  • 有利于优化的网站建设免费收录软文网站
  • 网站做的漂亮的企业一站式推广平台
  • smartschool 学校网站管理系统新手电商运营从哪开始学
  • 紧固件网站建设湖北网站seo
  • 商洛网站建设3分钟搞定网站seo优化外链建设
  • 怎样做好公司网站重庆seo代理
  • 在哪个网站做注册资本变更线上宣传推广方案
  • 企业建网站开发百度竞价一个月5000够吗
  • 徐州网站建设市场网络推广计划制定步骤
  • 附近培训电脑的地方seo策略
  • 浪子做的阿哲喊麦网站多少百度快照推广效果怎样
  • 网站改版目标百度app最新版本
  • 垦利住房和城乡建设局网站乌鲁木齐seo
  • jsp做网站注册页面免费加精准客源
  • 公安机关将备案网站网站制作多少钱一个