Verwenden Sie den Caller-Callback, um Ihre Passwort-Bereitstellung durchzuführen. Hier finden Sie völlige brutale Gewalt, scheußlich, hat keine Fehlerprüfung, und in keine Weise beispielhaft für meine Codierung Gewohnheiten, sondern zeigt, was ich bin auf:
#include <stdio.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/pem.h>
int password_cb (char *buf, int size, int rwflag, void *userdata)
{
memcpy(buf, userdata, 32);
return 32;
}
int main(int argc, char *argv[])
{
char password[32] = "pass\0word";
EVP_PKEY *key = NULL;
RSA *rsa;
OpenSSL_add_all_algorithms();
rsa = RSA_generate_key(2048, RSA_F4, NULL, NULL);
key = EVP_PKEY_new();
EVP_PKEY_assign(key, EVP_PKEY_RSA, rsa);
/* Write the private key to the file */
FILE *fp = fopen("somekey.pem", "w");
PEM_write_PrivateKey(fp, key, EVP_aes_128_cbc(), (unsigned char*)password, sizeof(password), NULL, NULL);
fclose(fp);
EVP_PKEY* rdkey = NULL;
fp = fopen("somekey.pem", "r");
PEM_read_PrivateKey(fp, &rdkey, password_cb, password);
fclose(fp);
PEM_write_PrivateKey(stdout, key, NULL, NULL, 0, NULL, NULL);
PEM_write_PrivateKey(stdout, rdkey, NULL, NULL, 0, NULL, NULL);
return 0;
}
es sollte die verschlüsselten Schlüssel zu somekey.pem
Dump, lese den verschlüsselten Schlüssel von somekey.pem
mit der gleichen Passphrase und lege schließlich beide Schlüssel auf stdout ab. Die beiden unverschlüsselt stdout Schlüssel war besser gleich sein ... Und sie sind:
Beispielausgabe
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAoHDPXfbdKEZDmLsxPNlWY3gBGzG69p0vTrhRZEzO09p5kZ35
T1y9cZAig+lEgY7U/trDWh0d1ABSfsLwT/dv2AAeBE2+avYE+v1jyr6N3FzFXS2O
jKOTkUy+Xw54aAlYHh4S8/K41rrxjcL7cjORWojl+4ZTfGLqCZE8Ga6c41MxBM9v
8ky9Kh2Tnf1zMnGk3Xd69jKnfsZyz7pzeNAZ8g0lezDt8r8b472fXTW2rnwezhTR
YsAbBjoP+P2JhNIQEHXXoTLqflQMfX34TTQLzg5OYOpNNezSqEFh9lFRvnE5B6h+
ov7qF+KyWT17dZMrywd2M6ixVFi3u6JbR/E/9QIDAQABAoIBAGhsZBtVVGYlLVPX
6lkfX+HHtnibqoNelO7YemkcsLUkimFjf2PPCaJDXKOcjLECZNEnU2RwdPyJ5SeJ
+10gwBPHJ8JHU3tMertddrj7w1s8qlxWDWSuBprYZ0N5KJcWFdssWcubHADulc9d
q8iNlbpmRcGqkOXxf0AQ3hwdERHHCLgJzB9Djlurwine1Xs33ZQkr0DecHRS5Unr
IbH9YLKQvGzdohrQfDTSntf/79wxdKRjdiAvPv5AQMz4lrEKYKLp+4B0j3kRq3LN
mokNdCcuhVJKuuN8s4C8EaBYByfWJbzVG2ZqHyoF0Zy1eFkTrXKoaExdv1q37Q3r
hVtD8CECgYEA0YD7sLkrt9WhTIMc0oUdeLLcpI6vvbmJtdkM1bUm/hpacG4VvpJs
Y/Txw4qHydCcbFIh4EyhuEcvnHrbFReyqWB25hLDnsOT/js76xbdJFVN+g7B+pCb
DfDv7LMKf8iJjVO+W5gnxxCrTrW9YbLs11vZUYcMnzySnsHYHtD7/C0CgYEAxAxK
EwkkTMvT0AvyBK6d+EzZPwcSpokWMqs8K2iGdQiGWuvCvrwaSPFOWS54RXx0Cm7j
iE5Nx5U1OXrA2iTwxTMXjcbHHL0mZ5KJIIP+qSu7839hK1b4bx45k0rjiDH5O+we
8y6gAh7Ni+T+7U2LqVBBMVbNzUycTztDshwxh+kCgYEAmCKpIykkhSe+LRidCocd
4rNIJLt1BTpBtWs7tckJ2sZ6XGCkq7Iawe9yzQPBHZ2+qa5u6TncyjvvaBuTElsW
I4docCS6J4Vw59JN7aa5yhOkP20OEg2Ge3Y2VFWjzy1qLdXdSxhP8m+5Zrv1HYhY
Ev+g7WI7mTrcYirz7VTnV7UCgYEAqXRR5qhFNxgLSk248HEaXA/Yy9DKPyZJCJzX
0lFzvt8Seq5D02d1dM0WwqEXFkCfcJEunJfKRRPkQH2pCiVZ86nY1xQU8PNRqb6Q
Romw6frCZ5MXo0V2UV2XuIfHqeZAHppWmi4X4h1L33qdGvKnID8dSo9ULfrlNNru
BZq2+VkCgYBV9wCdkG9CeqpJ2ZrEE4S7ZKUzbQY2nRpLTVp4fS07iE19XGoe+mZH
xFdR7t6mCqddY1SJ5qbKta0I4ibUw5LpaG0odVduqbJmIJskSyocVfQPd7qfoIch
Fku3d1WZiU4DNudSglSf2PIzw6S7Lp1Lp6n5wDzdxF3uJFYv1twlVQ==
-----END RSA PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAoHDPXfbdKEZDmLsxPNlWY3gBGzG69p0vTrhRZEzO09p5kZ35
T1y9cZAig+lEgY7U/trDWh0d1ABSfsLwT/dv2AAeBE2+avYE+v1jyr6N3FzFXS2O
jKOTkUy+Xw54aAlYHh4S8/K41rrxjcL7cjORWojl+4ZTfGLqCZE8Ga6c41MxBM9v
8ky9Kh2Tnf1zMnGk3Xd69jKnfsZyz7pzeNAZ8g0lezDt8r8b472fXTW2rnwezhTR
YsAbBjoP+P2JhNIQEHXXoTLqflQMfX34TTQLzg5OYOpNNezSqEFh9lFRvnE5B6h+
ov7qF+KyWT17dZMrywd2M6ixVFi3u6JbR/E/9QIDAQABAoIBAGhsZBtVVGYlLVPX
6lkfX+HHtnibqoNelO7YemkcsLUkimFjf2PPCaJDXKOcjLECZNEnU2RwdPyJ5SeJ
+10gwBPHJ8JHU3tMertddrj7w1s8qlxWDWSuBprYZ0N5KJcWFdssWcubHADulc9d
q8iNlbpmRcGqkOXxf0AQ3hwdERHHCLgJzB9Djlurwine1Xs33ZQkr0DecHRS5Unr
IbH9YLKQvGzdohrQfDTSntf/79wxdKRjdiAvPv5AQMz4lrEKYKLp+4B0j3kRq3LN
mokNdCcuhVJKuuN8s4C8EaBYByfWJbzVG2ZqHyoF0Zy1eFkTrXKoaExdv1q37Q3r
hVtD8CECgYEA0YD7sLkrt9WhTIMc0oUdeLLcpI6vvbmJtdkM1bUm/hpacG4VvpJs
Y/Txw4qHydCcbFIh4EyhuEcvnHrbFReyqWB25hLDnsOT/js76xbdJFVN+g7B+pCb
DfDv7LMKf8iJjVO+W5gnxxCrTrW9YbLs11vZUYcMnzySnsHYHtD7/C0CgYEAxAxK
EwkkTMvT0AvyBK6d+EzZPwcSpokWMqs8K2iGdQiGWuvCvrwaSPFOWS54RXx0Cm7j
iE5Nx5U1OXrA2iTwxTMXjcbHHL0mZ5KJIIP+qSu7839hK1b4bx45k0rjiDH5O+we
8y6gAh7Ni+T+7U2LqVBBMVbNzUycTztDshwxh+kCgYEAmCKpIykkhSe+LRidCocd
4rNIJLt1BTpBtWs7tckJ2sZ6XGCkq7Iawe9yzQPBHZ2+qa5u6TncyjvvaBuTElsW
I4docCS6J4Vw59JN7aa5yhOkP20OEg2Ge3Y2VFWjzy1qLdXdSxhP8m+5Zrv1HYhY
Ev+g7WI7mTrcYirz7VTnV7UCgYEAqXRR5qhFNxgLSk248HEaXA/Yy9DKPyZJCJzX
0lFzvt8Seq5D02d1dM0WwqEXFkCfcJEunJfKRRPkQH2pCiVZ86nY1xQU8PNRqb6Q
Romw6frCZ5MXo0V2UV2XuIfHqeZAHppWmi4X4h1L33qdGvKnID8dSo9ULfrlNNru
BZq2+VkCgYBV9wCdkG9CeqpJ2ZrEE4S7ZKUzbQY2nRpLTVp4fS07iE19XGoe+mZH
xFdR7t6mCqddY1SJ5qbKta0I4ibUw5LpaG0odVduqbJmIJskSyocVfQPd7qfoIch
Fku3d1WZiU4DNudSglSf2PIzw6S7Lp1Lp6n5wDzdxF3uJFYv1twlVQ==
-----END RSA PRIVATE KEY-----
Hoffnung, das ist das, was Sie suchen.
Haben Sie versucht, ein tatsächliches Passwort * callback * anstelle von NULL zu verwenden und die Passphrase anzugeben? Die Dokumente für das cb-Argument (und noch wichtiger, es weglassen) sind ziemlich klar: "Wenn die cb-Parameter auf NULL gesetzt sind und der u-Parameter nicht NULL ist, wird der u-Parameter als null-terminierte Zeichenfolge interpretiert Passphrase: Wenn sowohl cb als auch u NULL sind, wird die Standard-Callback-Routine verwendet, die normalerweise nach der Passphrase auf dem aktuellen Terminal mit ausgeschaltetem Echo fragt ". – WhozCraig
Ich habe keine benutzerdefinierte Rückruffunktion versucht, und die Standardfunktion, die das Terminal verwendet, scheint Nullen zu ignorieren. Ich werde sehen, ob ich etwas Brauchbares peitschen und zurückmelden kann. – Ron
Es scheint zu funktionieren. Mir ist nicht eingefallen, den Rückruf zu benutzen. Zum Schämen. Ich werde es mit meinem realen Problem versuchen und die Antwort genehmigen, wenn es funktioniert. Vielen Dank. – Ron