2017-07-07 2 views
2

Ich habe die n, e, d Komponente von anderen Geräten nicht die OpenSSL. Ich möchte mit der OpenSSL API verschlüsseln und entschlüsseln. Aber nach dem Verschlüsseln schlägt die Entschlüsselung immer fehl.RSA_public_decrypt schlägt bei Verwendung von RSA_set0_key (key, n, e, d) fehl?

Ich benutze RSA_set0_key für den privaten Schlüssel (n, e, d) Einstellung und RSA_private_encrypt ist in Ordnung, aber RSA_public_decrypt schlägt immer fehl. Ich frage mich, warum es scheitert.

Warum schlägt RSA_public_decrypt fehl?

+1

Fehler wie? Wo ist dein Code? Wo ist die Fehlermeldung? –

+0

Hinweis 'private_encrypt' und 'public_decrypt' sind wirklich keine Verschlüsselung, und (wie dokumentiert) kein Standard; Die Namen sind ein irreführendes historisches Relikt aus den 1990er Jahren. Das heißt, es funktioniert für mich in 1.1.0, und die offensichtliche Variante Einstellung n, e, d funktioniert direkt in 1.0.2 1.0.1 1.0.0 und 0.9.8. mcve? –

Antwort

1

RSA_set0_key() mit N, E, D ist möglich?

Ja. RSA_set0_key ist in den OpenSSL-Manpages dokumentiert. Seine Unterschrift ist:

int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); 

Die Beschreibung ist:

Der n, e und d Parameterwerte können durch Aufruf RSA_set0_key() und Hindurchleiten der neuen Werte für n, E und D als Parameter eingestellt werden zur Funktion. Die Werte n und e müssen nicht NULL sein, wenn diese Funktion zum ersten Mal für ein gegebenes RSA-Objekt aufgerufen wird. Der Wert d kann NULL sein. Bei nachfolgenden Aufrufen kann jeder dieser Werte NULL sein, was bedeutet, dass das entsprechende RSA-Feld unberührt bleibt. Durch den Aufruf dieser Funktion wird die Speicherverwaltung der Werte an das RSA-Objekt übergeben. Daher sollten die übergebenen Werte nach Aufruf dieser Funktion nicht vom Aufrufer freigegeben werden.

Weiter unten, unter RETURN WERTE:

RSA_set0_key(), RSA_set0_factors und RSA_set0_crt_params() return 1 bei Erfolg oder 0 im Fehlerfall.


Ich benutze RSA_set0_key für Schlüssel (N, E, D) Einstellung und RSA_private_encrypt ist in Ordnung, aber RSA_public_decrypt nicht immer

Es ist schwer zu sagen, was mit geht auf Verwendung von RSA_public_decrypt. Vielleicht können Sie Code hinzufügen, den Rückgabewert angeben und den Wert ERR_get_err angeben, wenn die Funktion fehlschlägt.

In der Zwischenzeit können Sie Ihr RSA-Objekt benötigen, um die erweiterten Parameter eines privaten Schlüssels zu haben, wie p, q, dp, dq und qInv. Dies sind die CRT-Parameter (Chinese Remainder Theorem), und sie werden mit RSA_set0_crt_params festgelegt. Siehe auch Unable to decrypt without Chinese Remainder Theorem factors? in der OpenSSL-Benutzer-Mailingliste.

+0

OpenSSL _kann RSA-Operationen mit dem privaten Schlüssel nur mit d ausführen, wenn auch weniger effizient. Die E-Mail, die Sie verknüpfen, erklärt das Problem eindeutig darin, _reading_ einen Nicht-CRT-Schlüssel (von PEM) zu verwenden, einen Schlüssel nicht zu verwenden, der in Arbeitsspeicher korrekt ist. –

0

Ich habe den Grund gefunden. Nach der Invertierung der Reihenfolge der Schlüssel (n, d) mit dem OS2IP funktioniert es. Danke für die Hilfe.

Verwandte Themen