如何使用Java对节点JS中加密的消息进行解密?

如何使用Java对节点JS中加密的消息进行解密?,java,encryption,Java,Encryption,我的节点js正在使用下面的解密/加密 const crypto=require('crypto'); //设置随机加密密钥 const ENC_KEY=Buffer.from(“BF3C199C2470CB477D907B1E0917C17BF3C199C2470CB477D907B1E0917C17B”,“十六进制”); //设置随机初始化向量 常量IV=缓冲区from(“5183666c72eec9e45183666c72eec9e4”,“十六进制”); var encrypt=((val)

我的节点js正在使用下面的解密/加密

const crypto=require('crypto');
//设置随机加密密钥
const ENC_KEY=Buffer.from(“BF3C199C2470CB477D907B1E0917C17BF3C199C2470CB477D907B1E0917C17B”,“十六进制”);
//设置随机初始化向量
常量IV=缓冲区from(“5183666c72eec9e45183666c72eec9e4”,“十六进制”);
var encrypt=((val)=>{
设cipher=crypto.createCipheriv('aes-256-cbc',加密密钥,IV);
let encrypted=cipher.update(val,'utf8','base64');
加密+=cipher.final('base64');
返回加密;
});
var decrypt=((加密)=>{
let decipher=crypto.createDecipheriv('aes-256-cbc',加密密钥,IV);
let decrypted=decipher.update(加密的'base64','utf8');
返回(已解密+最终解密('utf8'));
});
加密密钥=加密(miny);
console.log(加密的_密钥);
原始密码=解密(加密密码);
我正试图使用下面的代码在Java中对其进行解密/加密

String seed = "1233434343434343" //some key
String encrypted = the encrypted string from node js
    Ex: 8ci5qsYa5W/Z4tLNVjn1FbL0vwDBzLE2rv0X0Y0p (json encrypted)
私有静态字符串解密(字符串加密,字符串种子)
抛出异常{
byte[]keyb=seed.getBytes(“utf-8”);
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
字节[]thedigest=md.digest(keyb);
SecretKeySpec skey=新的SecretKeySpec(最常用的“AES”);
Cipher dcipher=Cipher.getInstance(“AES/CBC/PKCS5Padding”);
dcipher.init(Cipher.DECRYPT_模式,新的SecretKeySpec(seed.getBytes(“UTF-8”),“AES”),新的IvParameterSpec(iv));
byte[]clearbyte=dcipher.doFinal(DatatypeConverter
.parseHexBinary(加密));
返回新字符串(clearbyte);
}
但它总是抛出错误,说给定的最后一块没有适当填充。如果在解密过程中使用了坏密钥,则可能会出现此类问题


我尝试了堆栈溢出中提供的一些其他选项,但没有成功。如何在Java中解密来自NodeJS的消息?

我对加密知之甚少,但您是否尝试过在Java版本中从
Cipher.getInstance
中删除
/PKCS5Padding
?我的猜测是,它希望解密该类型的填充,但在加密时没有使用它。加密中没有使用PKCS5填充。我找到了此链接,它正在工作: