2017-07-04 207 views
0

我想用户SWCrypt进行RSA加密和解密。我应该把我的公钥64解码到服务器上。但是当我尝试发送生成的公钥的base64,我不能在服务器端得到这个错误:SWCrypt公钥VS PKCS8PEM密钥

let (privateKey, publicKey) = try CC.RSA.generateKeyPair(2048) 
let publicKeyBase64 = publicKey.base64EncodedString() 

错误:java.security.InvalidKeyException:IOException异常:寒冷的语法错误,而不是一个序列

但是当发送PEMPublicKey成功响应。

let publicKeyPEM = SwKeyConvert.PublicKey.derToPKCS8PEM(publicKey) 

publicKeyBase64和publicKeyPEM有什么区别?

MIIBCgKCAQEAuWwCZpNXJtT2spBsDwrQaTFGVAjicM341Qzg+1whtlj9J60c/7HYe6AcGHa8Dinkiuk7Whs1Wpa34aa223WQsa+kFSNwkC6oDUXhewan3VEsv1uedzHc8JPlTXnItJsP8cIETFgHpdKWk462hU09mVCTtQTix0BEb8snS96wERvKq957OeaGtFasfT/bQfY0mbDu6eEMqswmfX8j84kuTfwWtqt6mLMTJaDwnsGc5WY1zkau68IQ/CBiiLpZ5hSVMs2pPj3Ao0+wNhR5MlMgdcwrU62SHWcMJ5cYssFgWZyZSvO3n/yW43fE5a1i+9Tm2trveGIdMR4d/MoA79/8IQIDAQAB 

样品产生PEM键:

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWwCZpNXJtT2spBsDwrQaTFGVAjicM341Qzg+1whtlj9J60c/7HYe6AcGHa8Dinkiuk7Whs1Wpa34aa223WQsa+kFSNwkC6oDUXhewan3VEsv1uedzHc8JPlTXnItJsP8cIETFgHpdKWk462hU09mVCTtQTix0BEb8snS96wERvKq957OeaGtFasfT/bQfY0mbDu6eEMqswmfX8j84kuTfwWtqt6mLMTJaDwnsGc5WY1zkau68IQ/CBiiLpZ5hSVMs2pPj3Ao0+wNhR5MlMgdcwrU62SHWcMJ5cYssFgWZyZSvO3n/yW43fE5a1i+9Tm2trveGIdMR4d/MoA79/8IQIDAQAB 

如何发送生成的公用密钥PEM格式的密钥生成简单的键

样?

谢谢。

+0

什么格式需要你的服务器:DER(二进制),PEM(用----- BEGIN PUBLIC KEY编码的base64),还是用base64编码的DER? – pedrofb

+0

@pedrofb PKCS8用于私钥,X509用于公钥 – ava

回答

1

X509是公钥基础设施的标准,而不是编码格式。您可以在PEM(base64),DER(二进制)或XML中对X509公钥进行编码。此外,公钥的二进制数据可以在PCKS#1X509 SubjectPublicKeyInfo中表示。

据我所知,PKCS#8是私钥的标准。见PKCS #8: Private-Key Information Syntax Standard。所以我猜SWCrypt实际上是使用X509 SubjectPublicKeyInfo(也许我还没有读一些RFC),这是你的服务器正在等待的。

let publicKeyPEM = SwKeyConvert.PublicKey.derToPKCS8PEM(publicKey) 

SubjectPublicKeyInfo将公钥封装在添加头的ASN.1结构中。如果您使用publicKey.base64EncodedString对公钥(DER)的原始数据进行编码,则不会添加该头并且服务器不知道如何管理它。

+0

我意识到的是当我发送生成的公钥的base64的PEM密钥,并且这就是为什么我成功回应。所以现在当我发送PEM密钥服务器服务器检测这是我的公钥和加密发送数据与此密钥,我可以解密服务器发送数据与自己的私人密钥? – ava

+0

RSA加密是使用公钥进行的,并使用私钥进行解密,因此您的服务器可以向您发送使用公钥加密的数据。请注意,RSA加密受密钥大小限制,所以此架构适用于小规模 – pedrofb

+0

,这意味着服务器使用PEM密钥加密数据时我无法使用我的私钥解密此数据? – ava