从Java加密密码RSA公钥节点
我需要在NodeJS中使用java语言中的公钥RSA实现encrpytion来加密HttpPost参数从Java加密密码RSA公钥节点,java,node.js,encryption,rsa,public-key,Java,Node.js,Encryption,Rsa,Public Key,我需要在NodeJS中使用java语言中的公钥RSA实现encrpytion来加密HttpPost参数 public class RSAUtil { public static PublicKey getPublicKey(String key) throws Exception { byte[] keyBytes = Base64.decodeBase64(key.getBytes()); X509EncodedKeySpec keySpec = new
public class RSAUtil {
public static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes = Base64.decodeBase64(key.getBytes());
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
public static String encrypt(String publicKeyFrom, byte[] waitEncrypt) throws Exception {
String publicK = publicKeyFrom.replaceAll("\\r\\n", "");
PublicKey publicKey = getPublicKey(publicK);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(1, publicKey);
int inputLen = waitEncrypt.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
for (int i = 0; inputLen - offSet > 0; offSet = i * 117) {
byte[] cache;
if (inputLen - offSet > 117) {
cache = cipher.doFinal(waitEncrypt, offSet, 117);
} else {
cache = cipher.doFinal(waitEncrypt, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
++i;
}
byte[] encryptedData = out.toByteArray();
out.close();
return Base64.encodeBase64String(encryptedData);
}
}
下面是如何在Java中使用它
String PUBLIC_KEY = "MIIBIjANxxxxxxxxlGqQIDAQAB";
String reqParams = "{\"code\":\"A12345\"}";
String encryptedParams = RSAUtil.encrypt(PUBLIC_KEY, reqParams.getBytes());
我已经尝试将代码翻译成NodeJS,如下所示
const Crypto = require('crypto');
const encryptParams = function (params, publicKey) {
const buffer = Buffer.from(params)
const encrypted = Crypto.publicEncrypt(publicKey, buffer)
const ecryptedParams = encrypted.toString('base64');
return ecryptedParams;
}
const PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
MIIBIjANxxxxxxxxlGqQIDAQAB
-----END PUBLIC KEY-----`;
const reqParams = { code: 'A12345' };
const encryptedParams = encryptParams(JSON.stringify(reqParams), PUBLIC_KEY);
但只要我将NodeJS代码中的encrptedParams用于现有的Java代码HttpPost,它就不起作用。如果我使用encrptedParams从Java到NodeJS Axios,它就可以工作了
你能帮我指出我的NodeJS代码有什么问题吗?或者告诉我如何将上面的Java代码加密为NodeJS代码
谢谢。请显示Node.js代码中的
加密类是什么。它来自NodeJS中的内置加密库,我使用的是v11.10.0