- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在 swift 中固定 ssl 公钥,我阅读了很多如何做到这一点的示例,最后想到我找不到的是如何比较 SecKey 对象格式的两个公钥。示例:
let serverPublicKey = SecTrustCopyPublicKey(secTrust) /*return SecKey object from actual SecTrust*/
let clientPublicKey = getLocalPublicKeyFromDer() /*return SecKey from .der local*/
如何比较它们?现在我这样做并且有效:
if(serverPublicKey! as AnyObject).isEqual(clientPublicKey){
/*Key is the same, pinning OK!*/
}
在 gitHub 上找到它:https://github.com/teamcarma/IOS-AlamofireDomain/blob/master/Source/ServerTrustPolicy.swift
但是强制转换为 AnyObject 是个好主意吗?如何在 casted SecKey 上使用 isEqual?任何可以解释我吗?
附言。另一个想法是从 SecKey 获取 base64 - 我尝试过并且它也有效,但它需要 KeyChain 临时操作并且看起来不专业。
最佳答案
从标题中引用:
“大多数 SecKeychainItem 函数都适用于 SecKeyRef。”*
您可以将 SecKeyRef
转换为 SecKeychainItem
。如果这是一个有效的操作(即 key 是一个钥匙串(keychain)项),你可以应用函数
SecKeychainItemCreatePersistentReference
并得到一个 CFData
对象,其中填充了属性和数据。然后使用 memcpy
检查字节或将其转换为 NSData
对象并使用 isEqualToData
检查。不要忘记释放 CFData
对象。
编辑
在 iOS 上,据我所知,唯一可靠的方法是使用临时 key 将数据(或 secret )复制到钥匙串(keychain)中,以便您可以再次找到它,然后提取数据。这很麻烦,但如果你只是以极简的方式实现它,它应该不会超过 30 行代码。我有一个工作示例。
我通常的免责声明:使用它需要您自担风险,并始终注意安全问题。
关于ios - 比较 ios Swift 中的两个 secKey(公钥),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009105/
我想在 Swift 中进行 RSA 加密,但我在这一行遇到了一个奇怪的错误: var publicKey:SecKeyRef = KeyFormatter.getPublicKeyRefere
我尝试用 制作我自己的 SecKey exponent: let exponent = "10001" modulus: let modulus = "D6250B831F82EC984513922E
编辑 添加了所需请求的屏幕截图。 我正在尝试使用 Swift 4 制作一个 MacOs 应用程序。此应用程序与需要 RSA 加密的 API 进行通信。 Google 没有给出可以解释如何做到这一点的结
我在 从 NSData 创建 SecKey 时遇到问题。基本上,我的客户端-服务器通信基于使用私钥创建的签名并使用公钥在服务器上进行验证。 我正在两个设备之间实现 session 传输,为了继续通信,
我将一把 key 保存到钥匙串(keychain)中,然后读回它来比较结果。问题是:值(value)观现在不同了。知道哪里出了问题吗? 下面是我读写 SecKey 的方法: var privateKe
我正在尝试升级我从 this answer 获得的代码用于生成 CSR,从 Swift 2 到 Swift 3。 我已经升级了大部分代码,但原始答案的 Utility block 中的以下代码因错误而
我想使用 RSA 加密数据,我尝试在我的代码中生成 key 并且它正在运行,但我实际需要的是从服务器获取公钥作为字符串,然后将其用作 Seckey 这样我就可以使用它使用 RSA 加密数据,我试过这段
当我尝试运行特定应用程序的协同设计时,出现错误: /Users/xxx/xxxxxx/xxxxx.app: 替换现有签名 SecKey API 返回:-67671 (null)/Users/xxx/x
我使用 SecKeyGeneratePair 生成了一个 keeper。 var publicKeyPtr, privateKeyPtr: Unmanaged? let
目前我正在使用 iOS 安全框架生成一个 RSAKeyPair statusCode = SecKeyGeneratePair(keyPairAttributes as CFDictionary, &
我正在使用 swift 3 开发一个 iOS 应用。 我需要将 SecKey(这是用户 RSA 公钥引用)导出到字符串(例如 base64),以便通过生成的 QRCode 共享它。 它也必须以其他方式
我想将 ECPublicKey 转换为 PEM 格式,如下所示 "-----BEGIN PUBLICKEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo0WcFr
我正在尝试在我的 iOS 应用程序和 watchOS 等效应用程序之间同步私有(private)非对称 key 。我尝试使用 SecKeyCopyExternalRepresentation 将其导出
我在swift中做一个涉及RSA加密的项目,遇到一个指针问题如下: 我有一个全局 var publicKey: SecKey?可选值,我需要获取 UnsafeMutablePointer?>指向它的指
我在尝试构建我的 iOS 应用程序时收到以下错误。此错误仅在构建发布配置时发生。此外,我将 CocoaPods 用于我的第三方依赖项,并且这些构建通过 SSH 在 Jenkins 上运行。 SecKe
我正在尝试使用 key 对加密来验证我的应用程序和我的 PHP 服务器之间的身份。为此,我需要在我的应用程序中生成公钥后将其发送到服务器。 if let pubKey = NSData(base64E
我想在 swift 中固定 ssl 公钥,我阅读了很多如何做到这一点的示例,最后想到我找不到的是如何比较 SecKey 对象格式的两个公钥。示例: let serverPublicKey = SecT
我用 SecKeyGeneratePair 创建了一个公钥/私钥对(椭圆曲线)。 如何使用 SecKey 实例在 Swift 中使用 OpenSSL 生成 CSR? 最佳答案 据我所知,Apple 自
我正在尝试从 iOS 上的 SecKey 获取 PEM 编码 key 。 EC 私钥存储在 Keychain 上。 我从 SecKey 对象获取数据对象: if #available(iOS
我确实像这样使用 OpenSSL 生成私钥: openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 563 -n
我是一名优秀的程序员,十分优秀!