2017-07-04 111 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