gpt4 book ai didi

swift - 如何将 unmanaged 编码为 base64 以发送到另一台服务器?

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

我正在尝试使用 key 对加密来验证我的应用程序和我的 PHP 服务器之间的身份。为此,我需要在我的应用程序中生成公钥后将其发送到服务器。

if let pubKey = NSData(base64EncodedData: publicKey, options: NSDataBase64DecodingOptions.allZeros)! {
println(pubKey)
}

publicKey类型为 Unmanaged<SecKey> .

我在上面的代码中遇到的错误是:Extra argument 'base64EncodedData' in call

我该怎么做?有没有更好的办法?

编辑: key 对是这样生成的:

var publicKeyPtr, privateKeyPtr: Unmanaged<SecKey>?
let parameters = [
String(kSecAttrKeyType): kSecAttrKeyTypeRSA,
String(kSecAttrKeySizeInBits): 2048
]
let result = SecKeyGeneratePair(parameters, &publicKeyPtr, &privateKeyPtr)
let publicKey = publicKeyPtr!.takeRetainedValue()
let privateKey = privateKeyPtr!.takeRetainedValue()
let blockSize = SecKeyGetBlockSize(publicKey)

编辑 2: 所以问题是 SecKey 不是 NSData,所以我的问题应该是:如何将 publicKey:SecKey 转换为 NSData?

最佳答案

貌似可以把key暂时存到keychain,然后取回来转成数据:

func convertSecKeyToBase64(inputKey: SecKey) ->String? {
// First Temp add to keychain
let tempTag = "de.a-bundle-id.temp"
let addParameters :[String:AnyObject] = [
String(kSecClass): kSecClassKey,
String(kSecAttrApplicationTag): tempTag,
String(kSecAttrKeyType): kSecAttrKeyTypeRSA,
String(kSecValueRef): inputKey,
String(kSecReturnData):kCFBooleanTrue
]

var keyPtr: Unmanaged<AnyObject>?
let result = SecItemAdd(addParameters, &keyPtr)
switch result {
case noErr:
let data = keyPtr!.takeRetainedValue() as! NSData

// Remove from Keychain again:
SecItemDelete(addParameters)
let encodingParameter = NSDataBase64EncodingOptions(rawValue: 0)
return data.base64EncodedStringWithOptions(encodingParameter)

case errSecDuplicateItem:
println("Duplicate Item")
SecItemDelete(addParameters)
return nil

case errSecItemNotFound:
println("Not found!")
return nil

default:
println("Error: \(result)")
return nil
}
}

关于swift - 如何将 unmanaged<SecKey> 编码为 base64 以发送到另一台服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758446/

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