我已经通过JavaSpringSecurity生成了公钥,我尝试使用该公钥用Nodejs加密来加密数据,但它返回了错误
我已经使用JavaSpringSecurity生成了公钥,但是我不能使用该公钥使用Nodejs加密库对数据进行加密。我认为这是因为它的格式(X509) 我的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
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