Gibt es eine Möglichkeit, die Schlüssel als String zu laden? Wie kann ich den Schlüssel in RSACryptoServiceProvider laden?
Von Ihrem anderen Crypto ++ Frage, How to load Base64 RSA keys in Crypto++, es sieht aus wie Sie nur die öffentlichen und privaten Schlüssel haben, weil Sie DEREncode
und BERDecode
verwendet. Das heißt, Sie haben die RSA-Parameter und nicht die Informationen zum öffentlichen Schlüssel des Subjekts und die Informationen zum privaten Schlüssel. Ihren Schlüsseln fehlen die OID-Kennungen und Versionsnummern. So ist es gut.
Von Cryptographic Interoperability: Keys auf dem Code-Projekt benötigen Sie eine C# -Klasse, die die ASN.1/DER analysiert, nachdem Sie Base64 dekodieren. Der CodeProject-Artikel stellt eine C# -Klasse mit dem Namen AsnKeyParser
zum Lesen der ASN.1/DER bereit und gibt eine RSAParameters
zum Laden in einen CSP zurück.
Der Code für die AsnKeyParser
Klasse ist etwa 800 Zeilen, und es gibt fünf weitere unterstützende Dateien, um alles passieren zu lassen, so ist es nicht wirklich angebracht, es hier zu platzieren. Sie sollten es selbst herunterladen. Die Datei von Interesse heißt CSInteropKeys.zip
.
Sobald Sie die Klasse AsnKeyParser
verdrahten, wird es für einen öffentlichen RSA-Schlüssel so einfach wie folgt sein. Der private Schlüssel wird ähnlich sein und der Code wird auf der CodeProject-Site angegeben.
// Your ASN.1/DER parser class
AsnKeyParser keyParser = new AsnKeyParser("rsa-public.der");
RSAParameters publicKey = keyParser.ParseRSAPublicKey();
// .Net class
CspParameters csp = new CspParameters;
csp.KeyContainerName = "RSA Test (OK to Delete)";
csp.ProviderType = PROV_RSA_FULL; // 1
csp.KeyNumber = AT_KEYEXCHANGE; // 1
// .Net class
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
rsa.PersistKeyInCsp = false;
rsa.ImportParameters(publicKey);
wird Verknüpfen mit Dateien auf einer anderen Website verpönt, aber ich weiß nicht, wie die Informationen auf andere Weise zur Verfügung zu stellen. Es gibt zu viel Quellcode, um eine Antwort zu geben.
Zur Vollständigkeit macht .Net nicht make Interop einfach. Sie akzeptieren nicht ASN.1/DER oder PEM. Stattdessen akzeptiert .NET einige XML-Darstellungen der Schlüssel. Ich glaube, Sie können es in RFC 3275, XML-Signature Syntax and Processing finden. Microsoft does not state that for you. Ich habe es irgendwie zusammengesetzt, als ich den Code Project Artikel geschrieben habe.
Vielleicht sollten wir Crypto ++ eine Klasse hinzufügen, um XML zusätzlich zu ASN.1/DER und PEM zu erbrechen.
Was ist in der Base64-codierten Zeichenfolge? Ein DER/PEM ASN.1-Schlüssel oder etwas anderes? – yaakov
Es ist DER von Crypto ++ – Kyojin