2017-06-09 6 views
1

Ich versuche (aber scheitert), eine Methode zu erstellen, die einen AsymmetricKeyParameter von einem PEM-codierten privaten Schlüssel erstellt. Wie kann ich diese Methode vervollständigen?PEM-codierten privaten RSA-Schlüssel in AsymmetricKeyParameter konvertieren

Es scheint, dass eine ältere Version von BouncyCastle eine pemReader.ReadObject() Methode hatte, deren Ergebnisse gegossen werden könnten, aber das existiert nicht mehr.

Ich habe verschiedene Kombinationen ausprobiert die Verwendung PrivateKeyFactory, PrivateKeyInfo, Asn1Object und vielleicht 10 andere Arten, aber alle an einem gewissen Punkt eine Ausnahme werfen.

static AsymmetricKeyParameter ReadPrivateKeyFromPemEncodedString(string pemEncodedKey) 
{ 
    AsymmetricKeyParameter result = null; 
    using (var stringReader = new StringReader(pemEncodedKey)) 
    { 
     var pemReader = new PemReader(stringReader); 
     var pemObject = pemReader.ReadPemObject(); 
     // WHAT NEXT??? 
    }    

    return result; 
} 

Hier ist die PEM-kodierte Schlüssel ich mit dem Testen bin:

-----BEGIN RSA PRIVATE KEY----- 
MIIEoAIBAAKCAQEAk0AmagKx285Ufbri/olc+f3WagL1Ho+DrYdDSbuU7cJAq+uD 
9xGvvP9m2JavSP4wO9i9pB/cmCFMPoIj3oGJt1/cnLb/U2juneOw6Uo0N3F8TXdy 
XfZNAIPhq/jw0YfIypTFTTvFkKXfTArIwW/bQBW8/dujFR8i5CxPjRKRDOBEy0PP 
OLJDD0iUr9GX/h/EO4jQ7B/GszjhPiPx+gJCilaMY+jrSczjxpsKOXzpZEdT1NqM 
rzgvIZPHYhQzAiw9vQzov3vezDwKgKcRrUixZ2B8uiEQNn7Wa2QzWF3vL+6CGflF 
NYQcc0leDQBe86baYhCollouP4jfaH9KcMkYYwIBJQKCAQA7sjkWOHGeTLp4KSuX 
n3i4X/z6i5POHoF9s2B31mzPF2ZTiP4l5JNadWELsrXDpVHTEq2/E9X4fDOqo3ZT 
SUWrNLNiIKyzHLPDd/uc2OS8h/QfZ8aUy6KtLovrxclps5aXURG3hu86pBxBbCff 
t7nACNAT42ugx28CjoEdhBFKaCNcw/S3gZOkcotVdDUTCB+epveXNybAoZcuVNtu 
Y84hx+st8i0sXY+vpIJ8HOanbpdS/Q9UqDGNvg1zBlvnJ7PGOO4Jnc0EOa1Eoym2 
vJNItDAkK59KPKjuBLWTvTz/XLrZirkY57BQgUKnXHU6YGI7bvu8+iDnNAP1C90U 
/MllAoGBANstq/L7WOgcOhfbWEmcd59/vBtDbgf0pNwYyhmpIrG2SD6XaljQvOvo 
2/2oqNzCG+xZbTnbdkODRIXMDGcCzVkQAEkNvwWYHxb2XHUOhUPr+4zNfGtnJ1gv 
o7w6FVI3tD4buSmhcFZUGpNyzSbS+6FdXD37qjOFCPKcJMCY4BSPAoGBAKv9CdXw 
Ksyhr62sWqlU2F9FhjDNS9afJ5A7mZjrPraAusVsOkUtwsij9g74SH5agQNIUnFH 
NBwNenW+kbYahX6Q5pjNN5s6weG+2kbK8kZyuYo+Fuix0u6bTnL2IH35zP+hYWQS 
YM7yNDdBpH1deTWlTVL7vnZeEK/WTldw8PDtAoGAZLQekjwh7hrOlVbxNpP/nE9y 
Gl1AZIUpJtr1ErV+pK2yfZ+D454tScvastDzo7MhlhtABdOJXUomZvzjGpKVs0yK 
gm4ZfxxhT71NEzAvZGWBajTmI4JsBexf/Iljvf3rB8eMbRLSv+Fz/o6xSTCBc6dv 
khmvEMCVaIzuSqca2QMCgYAue714F2WDafghGdNQXB7NpBZuDfjSONpCqFMGvB7J 
ipNX87y4wEJ7apWHgV+zcmgOuZm9wDeY4QxXLJYViqCev2DrBwgcHbfcJb5z/3/A 
A1S9lD2K/6DK3d3Z4afqsjdnrxNnJ4/JOoqnJn971BLr53yupOdeQu/A0iMC4EEe 
hQKBgBCJteVdDk/0gK5c/++q88VIYplEDeDCiO2nIjXK7kHrm0q3DuUsr3D6VOjL 
VUViiU2nBKn40R8tNnxagPkL/uec0kZMGnnFsJLLKd48DGr34nQjsrGare0Pr8yo 
3uwlkKwtDUg5Zf2vLIIKqcX6tvHSQ2Zc57dAdAPvhpM5TtDJ 
-----END RSA PRIVATE KEY----- 
+0

Eigentlich Org.BouncyCastle.OpenSsl.PemReader existiert noch, und sein ReadObject() kann immer noch tun, was Sie hier brauchen, denke ich. Vielleicht verursacht die Hinzufügung von Org.BouncyCastle.Utilities.IO.Pem.PemReader Verwirrung? –

+1

großen Seufzer. Ja, das war die Verwirrung. vielen Dank. Würde es dir etwas ausmachen, deinen Kommentar als Antwort zu posten, damit ich ihn annehmen und upvoten kann? Ich habe meinen Beitrag mit der Lösung bearbeitet. Es verblüfft mich, dass Leute denken, dass zwei öffentliche Klassen desselben Namens in demselben Projekt eine gute Idee sind. Diese Klassen sollten in OpenSslPemReader und UtilityPemReader umbenannt werden, so dass es zu 100% aus dem Namen ersichtlich ist, was es tut und warum es qualifiziert ist und Sie nicht auf das Lesen der Using-Direktiven angewiesen sind. Wie auch immer, ich bezweifle, dass sich das aufgrund der Reife dieses Projekts ändern wird. – SFun28

+0

@PeterDettman - können Sie mit diesem einen helfen ... https://StackOverflow.com/Questions/44459497/convert-pem-encoded-rs-a-public-key-to-asymmetrickeyparameter – SFun28

Antwort

0

Hier ist eine Arbeitslösung:

using Org.BouncyCastle.OpenSsl; 

private static AsymmetricKeyParameter ReadPrivateKeyFromPemEncodedString(string pemEncodedKey) 
{ 
    AsymmetricKeyParameter result; 
    using (var stringReader = new StringReader(pemEncodedKey)) 
    { 
     var pemReader = new PemReader(stringReader); 
     var pemObject = pemReader.ReadObject(); 
     result = ((AsymmetricCipherKeyPair)pemObject).Private; 
    } 

    return result; 
} 
Verwandte Themen