在节点中读取Java生成的公钥

在节点中读取Java生成的公钥,java,node.js,cryptography,rsa,Java,Node.js,Cryptography,Rsa,我用Java生成了公钥的字节,如下所示: package test; import java.io.IOException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.util.Base64; public class

我用Java生成了公钥的字节,如下所示:

package test;

import java.io.IOException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.util.Base64;

public class Test {

    public static void main(String[] args) throws IOException, NoSuchAlgorithmException {
         KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
         //generator.initialize(dsabits, sr);
         KeyPair keyPair = generator.generateKeyPair();
         PublicKey publicKey = keyPair.getPublic();

         byte[] encodedBytes = Base64.getEncoder().encode(publicKey.getEncoded());
         System.out.println("decodedBytes " + new String(encodedBytes));
    }

}
=>解码字节混合FMA0GCSQGSIB3DQEBAQA4GNADCBIQKBGQCJQZ9HGPKZGI+JT5UZ7CEU8MQYNZXM1PPBIAMGZ2IW54IV+ptVAI8lG9mRNPTyZf07GZNnDSp5RcAn19lUh6eBxZ6R+YG78RJW4UFFUQPE8PKRASY0ESOXLH2IQPA1DQ86JQ1KSUGFBMCPK68RYT+YQGWBCO8YOMQAB+7HQIDAQAB

现在我需要使用这个公钥加密节点中的字符串。 我试过了

var crypto = require("crypto");
var pubKeyB64 = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJQz9HgPKzGi+jT5uZ7CEU8mQyNZXm1IpPBIaMGZ2IW54iv+ptVAI8lG9mRNPTyZf07GZNnDSp5RcAn19lUh6eBxZ6R+Yg78rjw4UFfuGQPe8pKrAsy0ESOxLJrh2iQpa4H1DQ86Jq1kSUGFBMCpk68RyT+yQGwBCO8yomqp+7HQIDAQAB';

var pubKey = Buffer.from(pubKeyB64, 'base64');

var toEncrypt = 'ciao';
var buffer = new Buffer(toEncrypt);
var encrypted = crypto.publicEncrypt(pubKey, buffer);
console.log(encrypted.toString("base64"));
但不幸的是我

错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始行

我无法控制公钥生成格式,不幸的是,我必须使用我在那里得到的。 有没有一种方法可以在节点中使用此密钥以某种方式加密字符串?

假设它表示希望作为字符串

PEM编码的公钥或私钥

要创建PEM编码,不要将base64转换为二进制,而是将其分解为64个字符的块,除了最后一个字符后跟一个换行符外,将一行
-----BEGIN PUBLIC KEY------
加上换行符放在开头,将一行
-----END PUBLIC KEY------
加上换行符放在结尾

我可以在Java端编写代码,但是你说你不能更改它,而且我不知道足够的js来编写nodejs端的代码,所以将CW设置为其他任何人都可以。

假设你的意思是它说它需要作为字符串

PEM编码的公钥或私钥

要创建PEM编码,不要将base64转换为二进制,而是将其分解为64个字符的块,除了最后一个字符后跟一个换行符外,将一行
-----BEGIN PUBLIC KEY------
加上换行符放在开头,将一行
-----END PUBLIC KEY------
加上换行符放在结尾


我可以在Java端编写代码,但是你说你不能更改它,而且我不知道足够的js来编写nodejs端的代码,所以将CW设置为其他任何人都可以。

显然,node crypto希望公钥是“PEM”形式,带有“----开始公钥------”和“----开始公钥------”行和64个长的base64编码行之间。显然,node crypto希望公钥采用“PEM”形式,中间有“----开始公钥----”和“----开始公钥----”行以及64个长的base64编码行。这应该是很容易的消息到该表单的关键。谢谢。没有必要将行分成64行:只需在开头添加
----BEGIN PUBLIC KEY-----
,在结尾添加
----END PUBLIC KEY-----
,就可以了。谢谢。没有必要将行分成64行:只需在开头添加
----BEGIN PUBLIC KEY-----
,在结尾添加
----END PUBLIC KEY-----
,就可以实现这一目的。