I am writing a web app which receives an RSA encrypted response from a server. It needs to decrypt this file.
So far, I have tried to use JSEncrypt to decrypt the file on the frontend. The issue seems to be that the backend is not encrypting the file properly. If I put both the private and public key on the frontend, I can encrypt and decrypt successfully. The issue seems to be the way that I am encrypting the response. When I read in the file in nodeJS and encrypt the file with the following code:
fs.readFile("rsaPublicKey", "utf8", (err, data) => {
if (err) throw err;
pubKey = data;
});
encryptedMessage = crypto.publicEncrypt(
{
key: pubKey,
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
oaepHash: "sha256",
},
Buffer.from(message)
);
res.send({"response": encryptedMessage.toString("base64")});
The message is bigger than the same message being encrypted with JSEncrypt.
Node.JS message: WLptALzMMws/Qj8qzeYkQ1NyRknoBGX0+oHmtzd0Cwl/RmWnwt6wSJ1qdbk5GMPcEML5iqCISqTfPTSEC6M37KIJAgGLViPENKcvonT7qQbMsn0yftFMl9grn1oLQz567t3lWpdyuCa99xqG+tGsAAOK84HHCW+nprSH6+7olysTnSzzZWvvBl6VGTpmwtoBEGOnZ5C/XLwiW7b2UuzHsksIA1s55OkJMOOUA6neZiJIzHsJSHZGgigKvKwYNQbjhmEBbdNVSvCPIE/d9dpTtWNABcnQX7SCA6/sTZH/f0OnGGXOyYabhq84fdw/WwpouUBWsRQLQYJgKy3EqY/y/w==
JSEncrypt message:
Sq9KQyp7KDqy1CBFRLtXm4ZAdxidgUNlp0d6X6xm3m+aBXKv4H7DVu0O40EMWeSWl3dQcBBC/oguJsoAz/GY//77ElIPIRuvPK4YIWPNq2fjoIgIs3Ew4I5TKAP4rph//NSlDLPc4ppXQjj/YO2238EHney9Wxxa9EZzE/p48arkxuEjB0gakWyVgTlF8x6H7LGsD4epS7RWJ0ua1kG1J6ZuMB82qBvq2MugLEuQamAfml4LtwWYFTJ/dIcAqVqrtHe6/F2oNGwXsE2GDEeZcFr4vTkejCs5dFcbbcgg/KVnROdGQHJlDGl0uUBy/2UNml3cT3FocjXkPGJa0zu3/g==
Is there any way to try and get this to work?
It turns out JSEncrypt does not support the padding I was using in the backend. I changed the padding in the backend to crypto.constants.RSA_PKCS1_PADDING
as shown by Topaco in the comments. Another possible option would be to use https://github.com/michaeldisaro/JSEncrypt and use OAEP padding again.