Ich bin kein Mathematiker (und ich bitte um Vergebung für das, was ich in diesem Beitrag sage!), Aber soweit ich weiß, die RSA-Verschlüsselung und Entschlüsselung sollte der gleiche Vorgang sein: M^e mod nWas ist der Unterschied zwischen openssl RSA_private_decrypt und RSA_private_encrypt?
wo M ist was ich entschlüsseln/verschlüsseln will, e ist der Exponent und n ist das Modul (privat in meinem Fall).
Die Bestätigung hierfür ist die folgende: Wenn ich ein Klartext zu „Zeichen“ will, muss ich die gleiche Signatur erhalten, wenn ich eine der folgenden Operationen durchführen:
RSA_private_encrypt(plain_text.size(), &plain_text[0], &encrypted[0], rsa.get(), RSA_NO_PADDING);
RSA_private_decrypt(plain_text.size(), &plain_text[0], &decrypted[0], rsa.get(), RSA_NO_PADDING);
Meine Frage ist: die RSA_private_encrypt Dokumentation gibt an, dass "flen weniger als RSA_size (rsa) - 11 für die auf PKCS # 1 v1.5 basierenden Füllmethoden, weniger als RSA_size (rsa) - 41 für RSA_PKCS1_OAEP_PADDING und genau RSA_size (rsa) für RSA_NO_PADDING" sein muss. Wenn die Operation die gleiche ist, warum habe ich diese Einschränkung nur im Verschlüsselungsfall? In der Tat, wenn ich versuche, einen Klartext kürzer als RSA_SIZE (1024 in meinem Fall) zu verwenden, ist die Entschlüsselungsoperation erfolgreich, während die Verschlüsselung fehlschlägt.
Bitte beachten Sie, dass ich Padding nicht verwende (und ich weiß, das ist unsicher).
PHP hätte diese nie aufdecken sollen ... Schlechte Sicherheitstechnik .... Der Unterzeichner sollte immer das Dokument erhalten, die Formatierung der Nachricht anwenden und den Hash selbst berechnen. – jww