Frage

Gibt es eine Möglichkeit, den RSA-Schlüssel zu verwenden, die ich mit der Crypto ++ API in OpenSSL erzeugt habe? Was ich suche ist eine Möglichkeit, die Schlüssel in einem Format zu speichern, dass sowohl Crypto ++ und OpenSSL können sie leicht öffnen.

Ich bin ein Genehmigungssystem zu schreiben und möchte Signaturen und Entschlüsseln von Dateien zu überprüfen, der API ++ Crypto verwenden, aber die Lizenzdateien erzeugen ich einen Web-Schnittstelle verwenden will (wahrscheinlich mit PHP, die OpenSSL nur unterstützt) zu erzeugen und verschlüsseln / signieren die Lizenzen.

würde ich beiden Anwendungen schreibt Crypto ++ verwenden und aus dem PHP nennen, aber da der private Schlüssel in einer verschlüsselten Form gespeichert wird, muss ein Passwort an die Anwendung übergeben werden und es auf der Kommandozeile vorbei scheint nicht zu sein eine gute Idee zu mir.

War es hilfreich?

Lösung

Sowohl Crypto ++ und OpenSSL können PKCS # 8-kodierten Tasten handhaben. In Crypto ++ können Sie Schlüssel und konvertieren zu PKCS # 8 Puffer wie diese,

erzeugen
AutoSeededRandomPool rng;
RSAES_OAEP_SHA_Decryptor priv(rng, 2048);
string der;
StringSink der_sink(der);
priv.DEREncode(der_sink);
der_sink.MessageEnd();

// der.data() is the bytes you need

Jetzt müssen Sie nur das Bytes zu PHP zu übergeben. Sie können es in einer Datei, senden in einer Nachricht speichern.

Der einzige gotcha ist, dass PHP-OpenSSL-Schnittstelle akzeptiert nur PEM PKCS # 8 codiert. Sie können ganz einfach DER-kodierten Puffer in PEM wie dies in PHP,

konvertieren
<?php
function pkcs8_to_pem($der) {

    static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
    static $END_MARKER = "-----END PRIVATE KEY-----";

    $value = base64_encode($der);

    $pem = $BEGIN_MARKER . "\n";
    $pem .= chunk_split($value, 64, "\n");
    $pem .= $END_MARKER . "\n";

    return $pem;
}
?>

Sie können auch PKCS # 8 bis PEM in C ++ konvertieren, wenn Sie es vorziehen. Der Algorithmus ist sehr einfach, wie Sie aus dem PHP-Code sehen.

OpenSSL ist so heutzutage weit verbreitet. Ich sehe keinen Grund, Crypto ++ zu verwenden für gängige Verschlüsselungsanwendungen wie diese.

Andere Tipps

  

Gibt es eine Möglichkeit, den RSA-Schlüssel zu verwenden, die ich mit der Crypto ++ API in OpenSSL erzeugt habe? Was ich suche ist eine Möglichkeit, die Schlüssel in einem Format zu speichern, dass sowohl Crypto ++ und OpenSSL können sie leicht öffnen.

Ja. Neben X.509 und PKCS # 8-kodierte Schlüssel (ZZ Coder Antwort), können Sie auch PEM verwenden Schlüssel einschließlich verschlüsselten Schlüssel codiert. Unterstützung für PEM-kodierte Schlüssel wurde für das Projekt im Juli gespendet 2014 für OpenSSL Interop.

Um die PEM-kodierten Tasten verwenden, müssen Sie die Crypto ++ PEM-Pack holen und neu kompilieren die Bibliothek. Das PEM-Pack ist nicht Teil der Bibliothek ++ Crypto wie von Wei Dai an der Crypto ++ Webseite zur Verfügung gestellt.

Wenn Sie installieren und neu zu kompilieren, seine so einfach wie:

// Load a RSA public key
FileSource fs1("rsa-pub.pem", true);
RSA::PublicKey k1;
PEM_Load(fs1, k1);

// Load a encrypted RSA private key
FileSource fs2("rsa-enc-priv.pem", true);
RSA::PrivateKey k2;
PEM_Load(fs2, k2, "test", 4);

// Save an EC public key
DL_PublicKey_EC<ECP> k16 = ...;
FileSink fs16("ec-pub-xxx.pem", true);
PEM_Save(fs16, k16);

// Save an encrypted EC private key
DL_PrivateKey_EC<ECP> k18 = ...;
FileSink fs18("ec-enc-priv-xxx.pem", true);
PEM_Save(fs18, k18, "AES-128-CBC", "test", 4);

Die Tasten aussehen so auf der Festplatte:

$ cat rsa-pub.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCg7ovcljEjZCFOdLWENBKE6FSk
Nke6OP79SMJABJw+JoEBpNddK6/v99IvA1qU76V0V4k8qLvhkVUtk9FArhhRsxeF
1fd8UVqgsT8j0YCVFcJ/ZA372ogpXyvc5aK9mZEiKE5TIF8qnDFFZiMWPrad1buk
hg+eFdo78QRLA5plEQIDAQAB
-----END PUBLIC KEY-----
$  
$ cat rsa-enc-priv.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E1A759E11CA515CE34B6E8CE5278C919

slMx02TMblahTedEKsfS+qYYo4nZFaqI3PhCRYmE5zUa9clHm7yo36wIk3oo52OB
f4AhOaJwiPQAbLe/kDHeP77iHd/4+hFNq/Haj6ahWRpXilLVOETLtefbzSGO8va3
ORnwQpPThs2V0EetPU3LB3QcA/XRjWDzyNa7+LydOjKwbQdZnF/jND5NCkEkncNM
iQJ1VWubN+Xs3Rx0CfLu5Chl1n7WnmCNMtLL/LtYeaR1SlRJa6BaF7hNHJJJ3+Jc
8curCKlpobs+XnlDfjyqgTXolkiepn95TnT7KSqi3BqVEpq/5LKMnkDJg6nwUR7A
w0jLNr1f8adWyBEj2Dp0D/jy8eDh65eHdJw4s8G5FZfBud1zWbvRQ3Ah70ISUKa3
4q/6z2vervPgoc+rMVYDvRf/mqa4LMXYhuygsyx50OgPldCC2d0cVVFCg/ljdEzO
UV5rSkK1Qczv8Nc1ZdY3fJA+qYIV8JqPPY+dJ2312R+myPi5Av0/69k8lZN5eIJk
SkiiFQmabhc+o6z4RFA52a3lOud3eGM9L5nbFQGc5COzQVZ6y8t06tLIp9Y5zjA4
KTgNncV5eq3Bau+cWXjP6pJRixFVfwIoy95mAur7B2P1iE4FXyZbvCovPL6vilT5
kSqAo7Znu0RpTjE36tWY6tFt+GU7k8EBrjA3Qi+8xxqyYtr57Ns+H/j+hhJTN8L7
IXoevwS81OPiB0Dmg6wLLXATG1+gCNXb8sd5U2eJhy4LOJA3y54CTgRnPXtM38CH
K+JvnDstyUl9IGTsgUz51ZzyJNZGU9Ro3pt/a3Cs5IJumaygZ0LQ44WBw9m/vja9
-----END RSA PRIVATE KEY-----
$  
$ cat ec-pub.pem
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEVwXjdIb2yy25QbIO0XiIHpySXwSpIAcz
v0Wdyq+fZ6BdJjs2jKvbs9pcRJn8yxlASWoz2R4NoHTZ2YokKsDfEg==
-----END PUBLIC KEY-----
$  
$ cat ec-enc-priv.pem
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,F1DBC73E26DCD310888932C2762B3512

nikex48SFvtNOIrOEDipwmxaghjn4jtrvwI3d1H/VNq9yp26WqFZxBJCUPFBFLjH
auA+AHeUo3BVkNQPs0VO4FD5xR50mtc2tCJizzhyTTTypLc3lRkxmD1MpeZnWRy2
70foVtNSvLL/QLJqNJGm/G9kl0xPN4zAfOq7Txoscnk=
-----END EC PRIVATE KEY-----

Siehe auch: für andere nützliche Crypto ++ Patches finden Sie in der Kategorie: Patch Seite auf dem Crypto ++ Wiki.

Versuchen Sie diesen Link: http://www.cryptopp.com/fom-serve/cache/62. html

Es sieht aus wie Sie benötigen PKCS verwenden # 8 und konvertiert von DER PEM-Format in der Lage sein, die Schlüssel in OpenSSL zu verwenden. Ich bin mir nicht sicher, ob Sie eine einzelne Datei für beide verwenden werden können.

Ich habe nur OpenSSL verwendet, so bin ich nicht sicher, welche Optionen Sie mit Crypto haben ++. Ich fand den Link oben Google für diese Begriffe durch die Suche. Crypto ++ RSA OpenSSL

DER ist Binärformat Openssl für Schlüssel und Zertifikate.

PEM ist Textformat Openssl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top