gpt4 book ai didi

ios - swift 3 : Convert SHA256 hash string to SecCertificate

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:54:37 24 4
gpt4 key购买 nike

Alamofire 允许使用证书和公钥固定(尽管从包中获取公钥的函数从包中的证书中获取 key )。

当从证书中提取公钥时,我能够进行固定,但是当我提供 SHA256 String 作为公钥(我从 api 调用中收到 key 字符串,如果第一次固定失败,它应该用作公钥。)我使用下面的代码将字符串转换为 [SecKey]

//创建服务器信任策略

let serverTrustPolicies: [String: ServerTrustPolicy] = [
destinationURL!: .pinPublicKeys(
publicKeys:savePublicKeys(),
validateCertificateChain:true,
validateHost:true
)]
self.manager = SessionManager(
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))

//获取[SecKey]

func savePublicKeys() -> [SecKey]
{
var key:SecKey?
var publicKeys:[SecKey] = []


//Check and use if backup key is received from beacon call
if(KeychainService().checkIfKeyExists(tag: "backupURL"))
{
key = KeychainService().obtainKey(tag: backupURLKey)
publicKeys.append(key!)
}

return publicKeys

}

//插入和检索钥匙串(keychain)数据的函数

  func insertPublicKey(publicTag: String, data: Data) -> SecKey? {
let query: Dictionary<String, AnyObject> = [
String(kSecAttrKeyType): kSecAttrKeyClassPublic,
String(kSecClass): kSecClassKey as CFString,
String(kSecAttrApplicationTag): publicTag as CFString,
String(kSecValueData): data as CFData,
String(kSecReturnPersistentRef): true as CFBoolean]

var persistentRef: AnyObject?
let status = SecItemAdd(query as CFDictionary, &persistentRef)
if status != noErr && status != errSecDuplicateItem {
return nil
}

return obtainKey(tag: publicTag)
}

func obtainKey(tag: String) -> SecKey? {
var keyRef: AnyObject?
let query: Dictionary<String, AnyObject> = [
String(kSecAttrKeyType): kSecAttrKeyClassPublic,
String(kSecReturnRef): kCFBooleanTrue as CFBoolean,
String(kSecClass): kSecClassKey as CFString,
String(kSecAttrApplicationTag): tag as CFString,
String(kSecReturnPersistentRef): true as CFBoolean
]

let status = SecItemCopyMatching(query as CFDictionary, &keyRef)

switch status {
case noErr:
if let ref = keyRef {
return (ref as! SecKey)
}
default:
break
}

return nil
}

我哪里错了?据我所知,我使用的 String 是一个 base64encoded 字符串,适用于 Android 部分。

最佳答案

这是为那些可能在试图找到相同或相似问题的答案时偶然发现的其他人准备的。

简短回答:散列是一种单行道。虽然理论上您可以尝试不同的输入来获取散列,从而获得问题中所需的证书数据,但实际上很难做到。已经编写了散列算法以防止您想要在此处实现的事情。要获得所需的输入,您可能必须花费大量的时间、空间和计算能力。

长答案阅读更多关于散列的真正作用。

例如,对于问题中的 SHA256,有 22562256 种可能的哈希值。如果您尝试了 22552255 种不同的输入,则有 50% 的机会。即使你每微秒尝试一次,这也会花费你 10631063 年。这是现实中难以实现的主要原因之一。

反转散列就像尝试从两个数字的总和 (x+y = 234) 中猜测。有很多可能的组合。有一些很好的答案 here

关于ios - swift 3 : Convert SHA256 hash string to SecCertificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539477/

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