RSA decryption with public key in Javascript

198 Views Asked by At

I have a php code that will encrypt data with private key and I want to decrypt that data on client side with public key. Many JavaScript libraries only supports decrypt with private key. Encryption with public key and decryption with private key is working but vice versa not working.

Is there a way to decrypt with public key in JavaScript?

    <html>
<head>
    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
    <script src="https://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/3.0.0/jsencrypt.min.js"></script>
</head>
</head>
<body>
<div class="" id= "canvas"></div>
    <script>
        // Create a new RSA key pair
        const privatekey = '-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDHMkHcZBWMCEuZ\n9nOv9NISE0AePVca/jpmmQbBsV/XVdQLjb1TMBtxZNeVKu89lk7O6jhILVP7Hcxr\nOy9bcn31mMeG0XuY/ivWrUEwmz4nuLBqiG6N1rI2VLv0KCx4rV7yEHGL8nv0EL2y\n+8ISDUPuwtWM+nsh2AxEuUuqsTDEOLjtmJHIGz+RRibmdS5OzHMNtUS3PP+wsnuH\n9MW6bCX0Je1rm+Ksegdy/BbVAp2wpOTcAax2Rh4hWm21TYXK3OSa8KddiNC2ZXv9\npa0wf/PjeMOz9Qdy/ZSB/KraWjQBO+5JNvnHjzwAfmPKS52xzqIIa7Y31GwOEp7J\nHJJjgu6DAgMBAAECggEBALzLmnareWyelCEZ4C4eSViOXFAM7VkNKgcB9NByMBdl\nJrPIpG+LAgeof1fHOLdTleAxSCTIqXcxmATuNIVk75NuOXZDZ/TqulwfG9FY4kE9\noB9orffLTF+IUhgoV3YNRBcDlMsCiY8aquFQEnGPlxpeGY8j/L5oCcC9KsVeaY0f\nUwM4D2WYKsADum23FNk12qeWEZXqrGRflsGNji5RVXoJAQyDMYolh7dI2fLbjPqW\n45och3j0WOvs7x0oYIeiTqoeTlgweuOFfO2nYAGYp92YjQcJI4yAdWw17J3FLoS5\nbvBkHnF0/IoF7ep8UpWQV/ITbLTEs4EerkT5SRTzgckCgYEA/NKMT94mn4JtRVlP\nTi0/XX78TDpHW8xQNx2MW204u9wrYpi/XDhHLrrn7109NTj/iHl0aLtsCd/M0QAm\nCOM9JRSSpPBcriuT6JoRyYvwfeiZaPMeNgp/oluP37G2JxbR0sIU1prXjDRDDrYP\nl6CbOvhHdOpKGNZ6cZaLqtnLSAUCgYEAybMrAjxaJmsqD/TT3aYWgiEpJEpQmiHq\nj543cBFikF8g2rbzTL6tCbxIyZaEzDmYSXv54q1t45soJ+DWxIfD7KkaNwFMx7YD\nbAy8FApW5rHcQbvp09qH3tnbPT+Oe2b4pJsfMPiAfB+wHLNsDdcxS2HQSnwLXVX+\nN2UvzvYNyucCgYEArif3gbj9EBoPXZsk9yxSHvyvnW7z4vd+NklDe2NklnwW4sdn\n4oXd+wHDbW7kD/qghAluOAsLZE3nT/1zNeIbJ6ThU39DyLK6I5umLxkX5BPLQbFf\nmUhoHZZHKIfJe2nLxgvtwNtPKgSCQOsHGKMI63lF9/LAchWkqQRUV6/JyWUCgYEA\nikwXSUkoZv9Dr/0m5+ths4gZNZDfA1AODLtnN6gz9NnFJTIcUJrM+sfnAJH8LCux\nh3FCPXK8zjsspWs81zRf2n14RA7YHndmkUeKDhOo0jVR2KCIC4LjdqHZ+X0CrQpF\nolfaYzGAp5rynjtH85WBbzZ6Ixg6kpzL2h+/UCDWBDECgYBaqrlJQdL0MTkKWYmh\nx4na8uN2fAJg1bNHLrz525wjX43B4hDX1zl8puqGoKhwZRqbdJ3ESkdiuL5Jw6SH\nEBTu9QIUU0F/M+qThy8xxSFyhU91gJS3DZKLszM9EpDrlDBWkHgO0BDhL5ejxU1U\nYgFx+1dCJOKwMR7F+ue3Q1SRZA==\n-----END PRIVATE KEY-----\n';

        const publickey = '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxzJB3GQVjAhLmfZzr/TS\nEhNAHj1XGv46ZpkGwbFf11XUC429UzAbcWTXlSrvPZZOzuo4SC1T+x3MazsvW3J9\n9ZjHhtF7mP4r1q1BMJs+J7iwaohujdayNlS79CgseK1e8hBxi/J79BC9svvCEg1D\n7sLVjPp7IdgMRLlLqrEwxDi47ZiRyBs/kUYm5nUuTsxzDbVEtzz/sLJ7h/TFumwl\n9CXta5virHoHcvwW1QKdsKTk3AGsdkYeIVpttU2FytzkmvCnXYjQtmV7/aWtMH/z\n43jDs/UHcv2Ugfyq2lo0ATvuSTb5x488AH5jykudsc6iCGu2N9RsDhKeyRySY4Lu\ngwIDAQAB\n-----END PUBLIC KEY-----\n';


        console.log('Private Key:\n', privatekey);
        console.log('Public Key:\n', publickey);

        const en = new JSEncrypt();
        const dn = new JSEncrypt();

        en.setPrivateKey(privatekey);
        dn.setPublicKey(publickey);
        // Data to be encrypted
        const originalData = 'Stackoverflow';
        // Encrypt the data
         const encryptedData = en.encrypt(originalData);

        console.log('Encrypted Data:', encryptedData);
        // Decrypt the data
        console.log('Encrypted Data:', encryptedData);
        const decryptedData = dn.decrypt(encryptedData);

        console.log('Decrypted Data:', decryptedData);

        // Check if the decryption is successful
        const decryptionSuccessful = decryptedData === originalData;
        console.log('Decryption Successful:', decryptionSuccessful);
    </script>
</body>
</html>
0

There are 0 best solutions below