Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RSA使用node.js加密在Java中获得BadPaddingException_Java_Node.js_Encryption_Cryptography - Fatal编程技术网

RSA使用node.js加密在Java中获得BadPaddingException

RSA使用node.js加密在Java中获得BadPaddingException,java,node.js,encryption,cryptography,Java,Node.js,Encryption,Cryptography,我正在尝试加密节点中的一些数据以发送到Java服务器,并不断出现此错误BadPaddingException。我也看到过其他帖子,它们给出了在Java端更改密码实例的答案 Cipher CheckCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 但由于此服务器用于多个不同的服务,因此此应用程序不可能使用此服务器 我当前的实现是使用NodeForge var publicKey = fs.readFileSync('Public.key',

我正在尝试加密节点中的一些数据以发送到Java服务器,并不断出现此错误BadPaddingException。我也看到过其他帖子,它们给出了在Java端更改密码实例的答案

Cipher CheckCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
但由于此服务器用于多个不同的服务,因此此应用程序不可能使用此服务器

我当前的实现是使用NodeForge

var publicKey = fs.readFileSync('Public.key', 'utf8');
const key = new nodeRSA([publicKey]);    //the file is not pem formatted and nodeRSA formats it to use in forge
var publicKeyForge = forge.pki.publicKeyFromPem(key.exportKey(scheme));
var providerIdBufferForge = forge.util.createBuffer(providerId, 'utf8');  
var providerIdBytes = providerIdBufferForge.getBytes();
var providerIdEncrypted = publicKeyForge.encrypt(providerIdBytes, 'RSAES-PKCS1-V1_5');
var encryptedProviderId = forge.util.encode64(providerIdEncrypted);
然而,在Java端出现了填充错误

我还尝试过使用节点rsa和crypto.publicEncrypt。我很确定这是算法方案中的一个不匹配,但经过几天的尝试和错误,仍然是空的

Java端代码是

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] byteDecryptText = org.apache.commons.codec.binary.Base64.decodeBase64(dataToDecrypt);
decryptedText = cipher.doFinal(byteDecryptText);
decryptedData = new String(decryptedText, "UTF-8");
有人有过将节点RSA加密与基本Java RSA解密相匹配的经验吗

非常感谢您的帮助!
谢谢

请不要依赖密码的默认行为。你需要控制哪些选项在起作用,否则你最终会遇到这样的问题。您应该能够精确地描述两端使用的填充,然后在代码中指定它。在java中不指定密码的填充,因为它已经在使用的代码只是一个糟糕的借口。。某个选项正在使用中,请指定它。。当这一切就绪时,您就会自动知道在javascript中使用什么选项。我不明白为什么您至少不能用完整的RSA转换字符串测试服务器。在任何情况下,Oracle提供程序默认为PKCS1PADDING,因此这不是您的问题。很可能您使用了错误的私钥,或者在某个地方混淆了数据,@EbbeM.Pedersen Java代码是多年前编写的,由另一个组维护,因此我真的没有任何选择。@JamesKPolk我同意数据在某个地方被混淆,虽然我直接使用了来自Forge的示例代码,但我并没有真正看到哪里出了问题。考虑到我可以直接访问开发人员,我非常确定这些密钥是正确的。关于数据可能在何处损坏的任何建议?我唯一的建议是展示一个完整的示例,其中包含私钥(当然是丢弃测试密钥)以及问题的节点和Java端的输入和输出。请不要依赖密码的默认行为。你需要控制哪些选项在起作用,否则你最终会遇到这样的问题。您应该能够精确地描述两端使用的填充,然后在代码中指定它。在java中不指定密码的填充,因为它已经在使用的代码只是一个糟糕的借口。。某个选项正在使用中,请指定它。。当这一切就绪时,您就会自动知道在javascript中使用什么选项。我不明白为什么您至少不能用完整的RSA转换字符串测试服务器。在任何情况下,Oracle提供程序默认为PKCS1PADDING,因此这不是您的问题。很可能您使用了错误的私钥,或者在某个地方混淆了数据,@EbbeM.Pedersen Java代码是多年前编写的,由另一个组维护,因此我真的没有任何选择。@JamesKPolk我同意数据在某个地方被混淆,虽然我直接使用了来自Forge的示例代码,但我并没有真正看到哪里出了问题。考虑到我可以直接访问开发人员,我非常确定这些密钥是正确的。关于数据可能在哪里损坏的任何建议?我唯一的建议是展示一个完整的示例,其中包含私钥(当然是丢弃的测试密钥)以及问题的节点和Java端的输入和输出。