问题标签 [seckeyref]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
378 浏览

objective-c - 从 AnyObject 转换时出错?到 SecKeyRef?在斯威夫特

作为基于 Swift 的 PKI 实现的一部分,我将 SecKeyWrapper.m 移植到 Swift

除了 Swift 实现中的一部分外,Keychain 访问方法(Objective-C 和 Swift)都运行良好。

我从对等方收到 base64 格式的公钥。它被转换为 NSData,然后使用以下方法保存在 Keychain 中:

成功将对等公钥保存在钥匙串中后,我需要将其作为 SecKeyRef 获取。

问题是 SecItemCopyMatching 返回一个 AnyObject 类型的对象?不能转换为 SecKeyRef (或 SecKey 那是别名)

我发现的解决方法是将 peerKeyRef 转换为 NSObject?然后使用 Objective-C 桥接到 SecKey,如下所示:

执行此操作的 Objetive-C 代码如下:

使用此解决方法转换为 SecKey 可以正常工作(没有警告或错误)并具有预期的结果。

你认为 Swift 代码中缺少什么来转换 AnyObject?到 SecKeyRef?

我正在使用 Xcode 7.3.1 和 Swift 2.2

rgds....

0 投票
1 回答
1999 浏览

objective-c - iOS10 中的 CFRelease 崩溃

下面是我的代码,它在 iOS 9 之前都可以正常工作。

这种方法在 iOS 9.x 之前可以正常工作,但是今天我将 XCode 更新到 8 并在 iOS 10 设备上运行。应用程序在
CFRelease(publicKey)处崩溃。

在下面崩溃之前是来自控制台的日志。

无法加载任何 Objective-C 类信息。这将显着降低可用类型信息的质量

在此处输入图像描述

无法准确解决问题。

当我启用 Zombie 并重现崩溃时。以下是来自控制台的日志。

*** -[Not A Type release]:消息发送到释放的实例 0x170225880

提前致谢。

我得到了问题。有一个内部方法 encodedData = [self encryptData:dataToEncrypt withKeyRef:publicKey];

SecKeyRef 对象被释放的地方。

但我想知道这在 iOS9 之前是如何工作的???????

0 投票
1 回答
286 浏览

swift - 从 NSData 到 Swift 2 中的 SecKeyRef

我有一个使用 RSACryptor.swift 生成的公钥/私钥对我能够将我的公钥转换为 base64 字符串以存储在我的服务器上。

我想在其他 iOS 设备上检索公钥并使用它来加密消息。

我能够将 base64 密钥转换为 NSData

但是我找不到如何将其转换为a SecKeyRef,因此我可以轻松使用它。

我发现的答案在 Objective-C 中并且已经过时了。

谢谢你的帮助 !

0 投票
1 回答
11022 浏览

ios - Swift 3 将 SecKey 导出为字符串

我正在使用 swift 3 开发一个 iOS 应用程序。

我需要将一个SecKey(这是用户 RSA 公钥引用)导出到一个字符串(例如 base64),以便通过生成的 QRCode 共享它。

它还必须以另一种方式工作,因为扫描QRCode, 的其他用户将能够SecKey从从 QRCode 中提取的字符串重建引用。

我找到了一些教程,但我不明白我需要从SecKey参考中提取什么,而且我不知道如何将它转换为String.

0 投票
1 回答
1796 浏览

ios - OSX 生成的密钥无法加密(SecKeyCreateRandomKey & SecKeyCreateEncryptedData)

我基本上是按照本指南生成私钥,复制公钥,然后加密消息。但是,它给了我错误(OSStatus 错误 -67712 - CSSM 异常:-2147415791 CSSMERR_CSP_INVALID_KEY_REFERENCE)。

最初,我以为我错误地设置了属性。但是,如果我通过 SecKeyGeneratePair() 函数创建公钥(具有相同的属性),则一切正常。很奇怪吗?

0 投票
0 回答
252 浏览

ios - RSA 公钥生成 - iOS 中字符中的密钥大小不同

根据应用程序的要求,我需要创建大小为 512 的 RSA 公钥。我正在使用以下代码:

我们在 Android 和 .net 上拥有相同的功能。当我们在所有其他平台上计算字符串的长度时,它是 181 个带空格的字符和 174 个不带空格的字符。

但是,在 iOS 中,我们只得到 153 个带空格的字符和 146 个不带空格的字符。

我们的代码有问题吗???还是 iOS 有一些不同的 RSA 长度?

请帮忙。提前致谢。

0 投票
0 回答
347 浏览

swift - SecKey (PCKS1) 到 Base64 (PCKS8) 从 p12

我查看了 StackOverflow 上的其他答案,但没有找到我想要的(IOS11)。我有一个 SecKey (privateKey),当我打印时:

SecKeyRef算法id:1,密钥类型:RSAPrivateKey,版本:4,块大小:2048位,地址:0x1d0223f60

我试图将其转换为 Data 并从那里转换为 Base64

苹果文档说 SecKeyCopyExternalRepresentation 返回 PCKS1 数据(https://developer.apple.com/documentation/security/1643698-seckeycopyexternalrepresentation),但我需要 PCKS8。

结果是来自 PCKS1 的 base64,但我必须将其发送到 JAVA 服务器进行处理,并且预期格式是来自 PCKS8 的 base64。

有没有办法从 PCKS1 转换为 PCKS8,然后再转换为 base64?

我发现这篇文章:https ://blog.wingsofhermes.org/?p=42这或多或少是我想要的,但它在objective-c中,我无法将它转换为swift

0 投票
1 回答
570 浏览

c++ - SecKeyCreateFromData 在 10.9 上以 -2147415792 失败

我有一个代码,它在安全框架的帮助下在 MacOS 上构造了一个 RSA 公钥。这在 10.11/10.12/10.13 上运行良好,但今天我发现这在 10.9 上失败了。下面是包装密钥的类的构造函数:

我删除了一些检查宏等,但这应该说明调用顺序。在 10.9 上,我得到一个空指针,SecKeyCreateFromData错误代码为 -2147415792。我尝试添加kSecAttrKeySizeInBits但没有帮助。同时SecKeyGeneratePair,同样的pParameters工作正常,所以我认为问题出在实际数据上。是否仅从 10.10 或类似版本支持 ASN.1 编码?

更新

我在测试中搞砸了,这实际上在 10.11 上也不起作用,这似乎与 add 相关SecKeyCreateWithData

更新 2

查看cssmerr.h这个错误代码似乎是CSSMERR_CSP_INVALID_KEY

0 投票
0 回答
497 浏览

objective-c - 在没有外部库的情况下验证 iOS 和 OSx 上的签名(-9809 OSStatus 错误)

我使用 SecKeyCreateWithData 创建公钥。剥离标题后从 Pem 创建密钥。

我尝试使用验证签名

  1. SecKeyRawVerify 返回 -9809 错误 (iOS)
  2. SecKeyVerifySignature 返回 -67808 “RSA 签名验证失败,不匹配”(iOS)
  3. SecTransformExecute 返回 false。(操作系统)

我们使用 SHA256 和 Unicode 编码对消息进行签名(C# RSACryptoProvider)。

创建公钥的代码:

验证码 iOS:

验证码 OSx:

我被困住了,任何帮助将不胜感激。

0 投票
0 回答
76 浏览

swift - 将私钥从安全飞地链接到配置文件

我需要将存储在安全飞地中的私钥链接到配置文件中的证书。有没有人有这方面的经验,可以帮助我如何做到这一点?

到目前为止,我的知识是这很难实现,因为安全飞地中的私钥只能从创建密钥对的应用程序中访问。但我绝对需要一个解决方案。否则我无法连接到 WPA2 Enterprise 网络并使用我们的 vpn。

对我来说最好的解决方案是,如果有一个用 swift 编写的解决方案,因为我用 swift 创建了我的密钥对,所以我的项目中没有不同的语言。但是如果有人有另一种语言的解决方案,我可以更改我的项目语言。