我正在尝试将我的 iPhone 中的公钥传递给其他方,但是我无法使用 iOS 的输出。
let parameters: [String: Any] = [
kSecAttrKeySizeInBits as String: 384,
kSecAttrKeyType as String: kSecAttrKeyTypeEC,
kSecPrivateKeyAttrs as String: [
kSecAttrIsPermanent as String: false
]
]
var error: Unmanaged<CFError>?
let privateKey = SecKeyCreateRandomKey(parameters as CFDictionary, &error)
let publicKey = SecKeyCopyPublicKey(privateKey!)
let pub = SecKeyCopyExternalRepresentation(publicKey!, &error)
let pubData = pub as Data?
print(pubData!.base64EncodedString())
示例输出:
BJSCZtBatd2BYEHtyLB0qTZNlphKf3ZTGI6Nke3dSxIDpyP9FWMZbG0zcdIXWENyndskfxV0No/yz369ngL2EHZYw6ggNysOnZ5IQSPOLFFl44m1aAk0o0NdaRXTVAz4jQ==
在python(我的第二方所在的地方)中,我有以下内容:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
pub_key = serialisation.load_pem_public_key(
data=xcode_data.encode(),
backend=default_backend()
)
我得到的错误是ValueError: Could not deserialize key data.
SecKeyCopyExternalRepresentation
那么文档中描述的输出到底是什么:
该方法以 PCKS #1 格式返回 RSA 密钥的数据。对于椭圆曲线公钥,格式遵循 ANSI X9.63 标准,使用字节串 04 || X || Y. 对于椭圆曲线私钥,输出格式为公钥与秘密标量的大端编码串联,即 04 || X || 是 || K. 所有这些表示都使用恒定大小的整数,根据需要包括前导零。
如何描述X6.93
格式?我将如何将它转换为我可以在 python 代码中使用的东西?
PS我试图将标题添加-----BEGIN PUBLIC KEY-----
到xcode输出中。