我在Node.js中有以下代码
let publicKeyString = '-----BEGIN PUBLIC KEY-----RANDOMPUBLICKEYOMITTED-----END PUBLIC KEY-----\n';
let publicKey = {
key: publicKeyString,
padding: 1
}
function _encrypt(input, key) {
let buf = new Buffer(input, 'utf8');
console.log('******');
console.log(buf.length);
console.log(buf);
console.log('******');
let encryptedBuffer = crypto.publicEncrypt(key, buf);
return encryptedBuffer.toString('base64');
}
let card = {
"card_type": "ABCD",
"card_number": "1111222233334444",
"expiration_month": 01,
"expiration_year": 2222,
"security_code": "321"
};
let encryptedPayload = _encrypt(JSON.stringify(card), publicKey);
console.log(encryptedPayload);
我也有测试用例来确定代码是否已正确加密(我不能分享这些) 我想在Java中使用等效的加密代码。我引用了一些其他stackoverflow问题,例如Encryption of Strings works, encryption of byte[] array type does not work 生成密钥的位置。这对我不起作用,因为我需要能够设置公钥的字符串。 Porting Node 'crypto' code to Java对我不起作用,因为我不相信我需要密码而节点js代码不包含密码,Encrypt with Node.js Crypto module and decrypt with Java (in Android app)对我不起作用,因为我无法设置公钥的加密字符串,java Encrypt method equivalent in node js crypto不起作用,因为我的节点js代码不包含密码。我还在java中引用了这段代码:
public static PublicKey getKey(String key){
try{
byte[] byteKey = Base64.getDecoder().decode(key.getBytes("UTF-8"));
System.out.println(byteKey.length);
X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(X509publicKey);
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
但是,当我简单地插入公钥字符串时,我没有得到正确的加密。我也不确定如何在Node js中实现填充以及crypto.publicencrypt的默认加密算法是什么。
任何帮助将不胜感激。