2017-07-04 34 views
0

RSCの暗号化と復号化のためにSWCryptを使用したいと考えています。私は私の公開鍵base64をサーバーにデコードする必要があります。SWCrypt公開鍵VS PKCS8PEM鍵

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

エラー:java.security.InvalidKeyException:IOExceptionが:algidパースエラー、シーケンスではありません

が、しかし、私は、サーバー側でこのエラーを取得することはできません生成した公開鍵をbase64を送信しようとすると、成功した応答を取得するPEMPublicKeyを送信します。

let publicKeyPEM = SwKeyConvert.PublicKey.derToPKCS8PEM(publicKey) 

publicKeyBase64とpublicKeyPEMの違いは何ですか?生成されたキーの

サンプル:生成されたPEMキーの

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

サンプル:

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

PEMキー形式の生成した公開鍵シンプルを送ることができますか?

ありがとうございました。

+0

DER(バイナリ)、PEM(----- BEGIN PUBLIC KEY ------でエンコードされたbase64)、またはDERがbase64でエンコードされているサーバーのフォーマットは? – pedrofb

+0

@pedrofb秘密鍵用のPKCS8と公開鍵用のX509 – ava

答えて

1

X509は、公開鍵インフラストラクチャの標準であり、エンコード形式ではありません。 PEM(base64)、DER(バイナリ)またはXMLにX509公開鍵をエンコードできます。また、公開鍵のバイナリデータは、PCKS#1またはX509 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