gpt4 book ai didi

ios - 比较 ios Swift 中的两个 secKey(公钥)

转载 作者:搜寻专家 更新时间:2023-10-31 08:09:06 27 4
gpt4 key购买 nike

我想在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com