我已经通过JavaSpringSecurity生成了公钥,我尝试使用该公钥用Nodejs加密来加密数据,但它返回了错误

我已经通过JavaSpringSecurity生成了公钥,我尝试使用该公钥用Nodejs加密来加密数据,但它返回了错误,java,node.js,express,rsa,Java,Node.js,Express,Rsa,我已经使用JavaSpringSecurity生成了公钥,但是我不能使用该公钥使用Nodejs加密库对数据进行加密。我认为这是因为它的格式(X509) 我的Nodejs代码 module.exports.encryptRsa = (toEncrypt, pemPath) => { let absolutePath = path.resolve(pemPath); let publicKey = fs.readFileSync(absolutePath, "utf8"); let

我已经使用JavaSpringSecurity生成了公钥,但是我不能使用该公钥使用Nodejs加密库对数据进行加密。我认为这是因为它的格式(X509)

我的Nodejs代码

module.exports.encryptRsa = (toEncrypt, pemPath) => {
  let absolutePath = path.resolve(pemPath);
  let publicKey = fs.readFileSync(absolutePath, "utf8");
  let buffer = Buffer.from(toEncrypt);
  let encrypted = crypto.publicEncrypt(publicKey, buffer);
  return encrypted.toString("base64");
};
我的Java代码

KeyPairGenerator keyGen = KeyPairGenerator.getInstance(keyAlgorithm);
                keyGen.initialize(2048);
                KeyPair keyPair = keyGen.genKeyPair();
                PrivateKey privateKey = keyPair.getPrivate();
                PublicKey publicKey = keyPair.getPublic();
                byte[] privateKeyBytes = privateKey.getEncoded();
                byte[] publicKeyBytes = publicKey.getEncoded();
                String formatPrivate = privateKey.getFormat(); // PKCS#8
                String formatPublic = publicKey.getFormat(); // X.509
                FileWriter fos = new FileWriter("publicKey.pem");
                fos.write("-----BEGIN RSA PUBLIC KEY-----\n");
                fos.write(enc.encodeToString(publicKeyBytes));
                fos.write("\n-----END RSA PUBLIC KEY-----\n");
                fos.close();
Java的
getEncoded()
方法通过节点加密以名为“spki”的格式返回公钥。该格式的Java名称为“X.509”,这是一个不幸的选择,因为它会导致与该名称的证书混淆

spki密钥的正确PEM头就是
----BEGIN公钥------
。只需去掉页眉和页脚中的
RSA