我的代码如下:
guard let privateKeyData = KeyManager.keyToData(key: privateKey)
else {
debugPrint("private Key Data not found")
return
}
var error : Unmanaged<CFError>?
let pubKey = SecKeyCopyPublicKey(wrappedKey)
///2. Encrypt Private key by Wrapped Key
guard let encryptedPrivateKey = SecKeyCreateEncryptedData(pubKey!, .eciesEncryptionStandardX963SHA1AESGCM, data as CFData, &error) as Data? else {
debugPrint("encryption error private key")
debugPrint(error!.takeUnretainedValue())
return
}
错误:
UserInfo = {numberOfErrorsDeep = 0,NSDescription = algid:加密:ECIES:ECDH:KDFX963:SHA1:AESGCM:密钥不支持的算法
512 位 RSA 不安全,不应使用。当使用从 2048 位开始的密钥大小(提供 112 位安全性)和 3072 位(提供 128 位安全性)时,RSA 相对安全。
请注意,错误中算法的描述表明使用
ECIES:ECDH:KDFX963:SHA1:AESGCM
执行包装。目前您提供的是 RSA 密钥,而不是所需的椭圆曲线密钥。
算法的意思是:
信息量很大,但最终得出结论,只有 ECDH 需要另一个输入参数:EC 公钥。该方案使用 GCM 模式下的 AES 进行加密,因此原则上要包装的密钥的大小并不重要。
结果是包装密钥需要是正确的类型,因为 ECDH 永远不会与 RSA 密钥一起使用。