2017-07-04 5 views
0

Ich möchte SWCrypt für RSA-Verschlüsselung und Entschlüsselung verwenden. Ich sollte meinen öffentlichen Schlüssel Base64 decodiert zum Server senden. aber wenn ich erzeugten öffentlichen Schlüssel base64 senden versuchen, ich kann nicht diesen Fehler in Server-Seite:SWCrypt öffentlichen Schlüssel VS PKCS8PEM Schlüssel

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

Fehler: java.security.InvalidKeyException: IOException: algid Parse-Fehler, nicht eine Folge

aber wenn Senden Sie PEMPublicKey, um eine erfolgreiche Antwort zu erhalten.

let publicKeyPEM = SwKeyConvert.PublicKey.derToPKCS8PEM(publicKey) 

Was ist der Unterschied zwischen publicKeyBase64 und publicKeyPEM?

Probe erzeugten Schlüssel:

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

Probe erzeugten PEM-Schlüssel:

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

wie erzeugten öffentlichen Schlüssel einfach von PEM-Key-Format senden können?

danke.

+0

Welches Format erwartet Ihren Server: DER (binär), PEM (base64 codiert mit ----- BEGIN PUBLIC KEY ------) oder DER in Base64 codiert? – pedrofb

+0

@pedrofb PKCS8 für privaten Schlüssel und X509 für öffentlichen Schlüssel – ava

Antwort

1

X509 ist ein Standard für Public Key Infrastruktur, kein Codierungsformat. Sie können einen öffentlichen X509-Schlüssel in PEM (base64), DER (binär) oder XML codieren. Auch die Binärdaten des öffentlichen Schlüssels können in PCKS#1 oder X509 SubjectPublicKeyInfo dargestellt werden.

In meinem Wissen PKCS # 8 ist ein Standard für private Schlüssel. Siehe PKCS #8: Private-Key Information Syntax Standard. Also denke ich SWCrypt ist wirklich mit X509 SubjectPublicKeyInfo (Vielleicht habe ich nicht einige RFCs gelesen), was ist, worauf Ihr Server wartet.

let publicKeyPEM = SwKeyConvert.PublicKey.derToPKCS8PEM(publicKey) 

SubjectPublicKeyInfo kapselt den öffentlichen Schlüssel in eine ASN.1 Struktur einen Header hinzufügen. Wenn Sie die Rohdaten des öffentlichen Schlüssels (DER) mit publicKey.base64EncodedString codieren, wird dieser Header nicht hinzugefügt und Ihr Server kann nicht verwalten.

+0

Was ich erkannte, ist, wenn ich einen PEM-Schlüssel sende, der base64 des generierten öffentlichen Schlüssels ist, und Und deshalb bekam ich eine erfolgreiche Antwort. So, jetzt, wenn ich PEM-Schlüssel für Server-Server erkläre, dies ist mein öffentlicher Schlüssel und verschlüsseln Daten mit diesem Schlüssel senden und ich kann Server senden Daten mit eigenen privaten Schlüssel entschlüsseln? – ava

+0

Die RSA-Verschlüsselung erfolgt mit dem öffentlichen Schlüssel und die Entschlüsselung mit dem privaten Schlüssel, sodass Ihr Server Daten mit dem öffentlichen Schlüssel verschlüsselt an Sie senden kann. Beachten Sie, dass die RSA-Verschlüsselung durch die Schlüsselgröße begrenzt ist. Daher ist dieses Schema für kleine Größen gültig. – pedrofb

+0

dh, wenn Server Daten mit PEM-Schlüssel verschlüsseln, kann ich diese Daten nicht mit meinem privaten Schlüssel entschlüsseln? – ava

Verwandte Themen