我正在尝试加密发送给服务器的消息。为此,我生成了一个公钥和私钥。我将我的公钥发送到服务器并从中接收它的公钥。
func generatePair() {
if let crypto = GMEllipticCurveCrypto.generateKeyPair(for: GMEllipticCurveSecp256r1) {
crypto.compressedPublicKey = false
curveCrypto = crypto
if let publicKey = crypto.publicKey {
let pub = Data(publicKey[1...publicKey.count-1])
self.publicKey = pub.base64EncodedString()
self.privateKey = crypto.privateKeyBase64
}
}
}
收到后,我尝试生成一个共享密钥来加密数据。
func generateSecret(withKey key: String) {
guard let crypto = curveCrypto else {
return
}
print("generateSecret \(key)")
sharedKey = crypto.sharedSecret(forPublicKeyBase64: key)
}
但我得到了错误(sharedKey = crypto.sharedSecret(forPublicKeyBase64: key))
*** 由于未捕获的异常“无效密钥”而终止应用程序,原因:“公钥 {length = 64, bytes = 0xace3000d e1483ed9 82d88432 9397c716 ... d64e0fe1 47920d9f } 无效”
我的公钥和服务器密钥长度相同。
我做错了什么?