0

On the client side,

import JSEncrypt from 'jsencrypt';
var cryptor = new JSEncrypt();
const publicEncrypt = (str:string, publicKey:string = PUBLIC_KEY) =>{
    cryptor.setPublicKey(publicKey);
    return cryptor.encrypt(str)
}
// 
publicEncrypt('q7jp7s13txqj968m',PUBLIC_KEY);

the result encodeKey is Reb0MRnfT0q+ydl8xkR8gQ16jXUdyiwa9QJaz7sklBbq+b/j36u7OR4SR2Xqne19W1noQW77dcHP7qxCMq89w3zHXeto655XJIKaVxrJG+pO8PQHyqVOfMiAoCxPf7RqiPqvQ4Niv5uWURperkdnrXD95LMoYd4IBKKqVaGRDluZUpX0THiF2tN8SZ/EBPcWBvOHGPX24BmzfysmewdaQVJ1bh479KyINxTxysSdp1vglrywcZDVKE5geSkOY8WxQWtTuQPEi/OAtNxwFYae9mfssV1dV0LB6Lnpbm/C/51NlCwdddRogqywhLpEnCTbdm7xLoYj2TlwdJuJUWiiYA==

on the server side,

const NodeRSA = require('node-rsa');
const privateKeyObj = new NodeRSA(PRIVATE_KEY);
let AESkey = privateKeyObj.decrypt(encodeKey, 'utf8');

I got an error saying

Error: Error during decryption (probably incorrect key). Original error: Error: error:02000079:rsa routines::oaep decoding error

additional:

const PRIVATE_KEY = `-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDySf3VHbk81ukT
7PL/lNuqVHgFL2muW9mCCF6DqwwfporjstLg36BR/A87bzzferPuMVqCpSpJAXu5
9CuRp5lCB3yANF839CHmslOqwmlFeVoVvnuitdcVh9qvDmn1Ta2G4d47KL7ZVNWa
8RMulWx/ympdMnOJIg493YgMM2YPrW/Rh3+FRr8sqrkimWF+bnlzGoQMcj8nSS+J
KrNLtYIJ4x36o1Ml8SUoz0zuXOoL3O49vnA+tn6ItiPcduV9a6N7hHSOD9fEL4yS
Y84xpVDd8eK6rnUtUpiSANKuxIjPGNk6zkchPL+Lho3iTOz0bZ25hmrGtxg0JyqN
nJUwMWvDAgMBAAECggEAdunTt9YnxPFhYZMozEGd8iIU6c6UWqvfu88pvAumHp6Z
ihmJIC8BO1uviicVREWvq5bzai1v7Hba57Ar9gfA00RjWXTaytZ6EQSyxZs3GY7u
pL9hZMFEd9++d65mWKuwIAQZEwXzbS0SzUHGfVV+89U/kNAjHknlnX1tuTc8vzIW
tnd71zcLaXLzzpJhgkEEGc1IoW7DYfFMuPrhtXk7y+zLIWFbv+7GKDFRJ+e8KTqr
/swEGYshAmD9CRaqW3OGbLb65IOECZTDXFkUuWXSNjfiOYV38nVowq1NIYIQJxIH
JwsToCYfgZQciDvtOh6lZAV8bgG+gwFoPldAM0MfmQKBgQD7Klx2vPwJ1a8UuD7v
EVSPo5kyVr+AfT/CuZ5E1PFcyt7KMT4TsCWjOOSy4VrRHCyRpXwhBjI1uJV4hU4Q
qDIpJIal9F2esOvLdZMa6xQ1UVhn6HpOFj39FT2P8BA1SYaDECcyldr7z+63WsQG
eAZofSjbocbx7iItdODFl34etwKBgQD28+QT5T9YjuhfHtxuneKu6mtXTqJuLXUt
FsziucHZ5byNjSySMv3AdIBAV/Vm/4Ez/AIzamjejou41I4pTOmOE3z+jqFGII7G
pq9P1y1D+v1UUgTliGOvlUKKvkPea6XZpelJGH8MYGkL4Cd2ivQBgVSyfnukYJZP
Mf/ZCB+PVQKBgQCxr7pSVkiIPJ/sLJx5TO1h4P9UWYKJSBJ/lAmf8HYAi5UpvcSI
8SjvXCSPWFaDcUcmkshKJLQIxVkZNlWP+y3hZXHMniBNUCTAf6FefciCH9ZHTHSa
IaohDZHL7q3IxQdgWWEhrFqLowLivFfJq8f8y+7H0p+IMEwFlJYfs5kJ6QKBgQCA
qr4w54bDu2Gy/b9YGwcan6ThzmSvBxxAK9sAXkx0HVDKZ73LRqoTdh/EZo/D5GgL
D8iNxWlyW87MtGKFfj9J+Tls4B+DDD+XnQ1GihRZkRIgtsM6XH+j4h7TbyKpZmj5
J4qOvSak6i6RM28cQnWzuxDIF0KQeIqYJLLq/2KCKQKBgGmxU+ac7trUh3yAuY1t
DoJ1eicKAXCcYIGVs9+Me4WeeyTvZBxeqSYaone0G08JQT9xtCHSRoZPXnb0PL8U
6177XZfdqp6eFDh5kOXsyC9LQjEqYDFgQzRMwWY+yfpL6/o8Ibf5o3dS6me+pvU0
dk9pTm2dDpgZsz5d4tVkCVMp
-----END PRIVATE KEY-----`
// -----END RSA PRIVATE KEY-----

// -----BEGIN PUBLIC KEY-----
const PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8kn91R25PNbpE+zy/5Tb
qlR4BS9prlvZggheg6sMH6aK47LS4N+gUfwPO28833qz7jFagqUqSQF7ufQrkaeZ
Qgd8gDRfN/Qh5rJTqsJpRXlaFb57orXXFYfarw5p9U2thuHeOyi+2VTVmvETLpVs
f8pqXTJziSIOPd2IDDNmD61v0Yd/hUa/LKq5Iplhfm55cxqEDHI/J0kviSqzS7WC
CeMd+qNTJfElKM9M7lzqC9zuPb5wPrZ+iLYj3HblfWuje4R0jg/XxC+MkmPOMaVQ
3fHiuq51LVKYkgDSrsSIzxjZOs5HITy/i4aN4kzs9G2duYZqxrcYNCcqjZyVMDFr
wwIDAQAB
-----END PUBLIC KEY-----`
Topaco
  • 40,594
  • 4
  • 35
  • 62
user824624
  • 7,077
  • 27
  • 106
  • 183

1 Answers1

1

JSEncrypt uses PKCS#1 v1.5 as padding (and only this, s. #84), while Node-RSA applies OAEP by default (and optionally PKCS#1 v1.5). Decryption is only possible if both paddings match. To use PKCS#1 v1.5 on the Node-RSA side, this must be explicitly specified:

...
const privateKeyObj = new NodeRSA(PRIVATE_KEY, {encryptionScheme: 'pkcs1'}); // Fix
let AESkey = privateKeyObj.decrypt(encodeKey, 'utf8');
console.log(AESkey) // q7jp7s13txqj968m
Topaco
  • 40,594
  • 4
  • 35
  • 62