2017-08-12 2 views
1

Ich versuche, eine Zeichenfolge mit einer PEM-Datei öffentlichen Schlüssel in Dotnet-Core (1.1) zu verschlüsseln und meine Frage ist: Wie mache ich das?RSA verschlüsselt eine Zeichenfolge von PEM öffentlichen Schlüssel in Dotnet-Core

Ich dachte, dies einfach ein Fall von sein würde:

var cert = new X509Certificate2("path_to_public_key.pem"); 
using (var rsa = cert.GetRSAPublicKey()) 
{ 
    // encrypt here 
} 

Allerdings, wenn ich versuche, neues Zertifikat ich folgende Fehlermeldung bekommen:

error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

Die PEM-Datei sieht wie folgt aus :

-----BEGIN PUBLIC KEY----- 
... ANBgkqhkiG9w0BAQEFA ... 
(loads more text) 
-----END PUBLIC KEY----- 

ich habe die pem-Datei und es gibt überall geprüft keine Fremd^M Zeichen (wie fro m a suggerieren Ursache des Fehlers here).

(Ich bin auf macOS Sierra, wenn das einen Unterschied macht)

Jede Hilfe wäre sehr dankbar!

+2

Sie scheinen einen öffentlichen Schlüssel zu haben und nicht ein Zertifikat. Ich denke, du solltest 'X509Certificate2' nicht verwenden. –

+0

@ArtjomB. Vielen Dank! Du hast mich auf den richtigen Weg geschickt. (Es ist so offensichtlich, wenn jemand darauf hinweist!). – stush

Antwort

1

Artjom B's Kommentar schickte mich auf den richtigen Weg. Ein öffentlicher Schlüssel ist in der Tat kein Zertifikat.

Lösung kam von this ausgezeichnete Post.

Für Dotnet-Core (die keine RSACryptoServiceProvider Klasse hat) habe ich ein paar kleine Änderungen vorgenommen. Sie können ein RSAParameters Objekt aus GetRSAProviderFromPemFile zurückkehren, können Sie dann diese wie verwenden:

using (var rsa = RSA.Create() 
{ 
    rsa.ImportParameters(GetRSAProviderFromPemFile("path_to_pem.pem")); 
    var encrypted = rsa.Encrypt(...); 
} 
Verwandte Themen