RSA Encryption between JavaScript and PHP (bidirectional)

Auf der Suche nach einer Möglichkeit, Daten zwischen JavaScript und PHP mittels RSA (PublicKey und PrivateKey) zu verschlüsseln und entschlüsseln trifft man auf viele Libraries, Demos, Beispiele und GitHub Repos.
Egal welche ich getestet habe, es war keine zufrieden stellende Lösung dabei.
Entweder funktionieren diese schlichtweg nicht (mehr) oder es ist eine unidirektionale Lösung, jedoch keine bidirektionale.

JsPhpRSa

Man muss auch bedenken, dass ein Private oder Public Key in unterschiedlichen Formaten vorliegen kann. Als base64 String, im PEM Format, als Hex String,…
Diverse Libraries benötigen die Keys ggfs. auch in anderen Formaten, was eine Vereinigung zweier Libraries zweier Sprachen nicht gerade einfacher macht.

Nach diversen Recherchen und etlichen Versuchen mit diversen Demos, scheinen sich für mich phpseclib und JSEncrypt herauskristallisiert zu haben.
Anbei mein funktionierendes Beispiel als Single-File (Quick and Dirty, jedoch zu Demozwecken ausreichen!). Es müssen lediglich noch die phpseclib sowie jsencrypt heruntergeladen werden.

Oder hier als komplettes, funktionierendes ZIP-Archiv inkl. aller Abhängigkeiten!

=> Download JsPhpRsa.zip Archiv


 $publicKey,
            "private" => $privateKey,
        ));
        exit(); break;

    case "decrypt":
        $rsa->loadKey($privateKey); 
        $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
        echo $rsa->decrypt(base64_decode($_POST["encryptedPayload"]));
        exit(); break;

    case "encrypt":
        $rsa->loadKey($publicKey); 
        $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
        echo base64_encode($rsa->encrypt($_POST["plaintextdPayload"]));
        exit(); break;
}
?>


    
    
    


    
    
    

=> Download JsPhpRsa.zip Archiv

Durch das Fortsetzen der Benutzung dieser Seite, stimmst du der Benutzung von Cookies zu. Weitere Informationen

Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter.

Schließen