A criptografia RSA Java e a descriptografia do Node.js não estão funcionando

Eu tenho um sistema que exige que um par de chaves RSA seja gerado em javascript, que a chave pública seja armazenada em um banco de dados no lado do servidor (como uma sequência), e o lado do servidor em Java criptografará uma sequência com o público armazenado chave e envie-a para o lado do cliente, que descriptografará a string com a chave privada.

Estou usando uma versão navegada do node-rsa no navegador do cliente.

Primeiro no cliente eu giro um par de chaves e exporto as chaves, armazenando-as como strings

var NodeRSA = require('node-rsa');
var key = new NodeRSA({b: 1024});
key.exportKey("pkcs8-private");
key.exportKey("pkcs8-public-pem");

A chave privada exportada é armazenada no cliente e o público no servidor

Em seguida, usei o java para criptografar uma string com a chave pública recebida, por isso analiso a chave pública pkcs8 em um objeto Java PublicKey.

String pubKey = "<Retrieved pkcs8 public key>";
pubKey = pubKey.replaceAll("(-+BEGIN PUBLIC KEY-+\\r?\\n|-+END PUBLIC KEY-+\\r?\\n?)", "");
byte[] keyBytes = Base64.decodeBase64(pubKey);
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey pk = kf.generatePublic(spec);

E criptografar um texto com ele

byte[] cipherText;
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pk);
cipherText = cipher.doFinal("Hello World!".getBytes());
return Base64.encodeBase64String(cipherText);

O que funciona muito bem e retorna uma string criptografada codificada em Base64 como esta

WTS1J2f4w5icsUOCtulyHDaBmB5lN7D8mnj0QWMDBkUGiPHkM8nHVx9pd0MtbQAQNasQS2X8kisLMYyEMPasFZtDH0zX1e8lNYaW0xMKsg++ge87f+95nl+TmxDy6S1m7Ce/n0wXno+0MbSv8YsJtsUcAleyyfQX2bxqX8u7Gjs=

Então eu tento descriptografar a string no lado do cliente

Primeiro eu reimporto as chaves armazenadas no node-rsa

var NodeRSA = require('node-rsa');
var key = new NodeRSA();
key.importKey("<exported private key string>","pkcs8-private");
key.importKey("<exported public key string>","pkcs8-public-pem");

Então eu tento descriptografar a cadeia de caracteres criptografada codificada em Base64

key.decrypt("<Base64 Encoded Encrypted>", 'utf-8');

É aqui que o problema acontece, o javascript lança esse erro

Erro não capturado: erro durante a descriptografia (chave provavelmente incorreta). Erro original: Erro: mensagem de decodificação de erro, o lHash calculado a partir do rótulo fornecido e o lHash nos dados criptografados não coincidem. (…) No entanto, eu testei que, se eu criptografar e descriptografar o texto apenas em javascript, ele funcionará perfeitamente . Isso me faz pensar que há alguma diferença entre a maneira como eu o criptografei no java e como é feito no javascript

Alguém poderia apontar o erro que cometi aqui, por favor?

questionAnswers(1)

yourAnswerToTheQuestion