Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
javax.crypto.BadPaddingException:消息大于模数_Java_Cryptography_Badpaddingexception - Fatal编程技术网

javax.crypto.BadPaddingException:消息大于模数

javax.crypto.BadPaddingException:消息大于模数,java,cryptography,badpaddingexception,Java,Cryptography,Badpaddingexception,我正在做一个项目,我需要在RMI网络上显示一些加密解密。 我使用的是RSA系统。 解密时,我的代码显示以下错误: javax.crypto.BadPaddingException: Message is larger than modulus at sun.security.rsa.RSACore.parseMsg(RSACore.java:182) at sun.security.rsa.RSACore.crypt(RSACore.java:112) at sun.se

我正在做一个项目,我需要在RMI网络上显示一些加密解密。 我使用的是RSA系统。 解密时,我的代码显示以下错误:

javax.crypto.BadPaddingException: Message is larger than modulus
    at sun.security.rsa.RSACore.parseMsg(RSACore.java:182)
    at sun.security.rsa.RSACore.crypt(RSACore.java:112)
    at sun.security.rsa.RSACore.rsa(RSACore.java:103)
    at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:355)
    at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:382)
    at javax.crypto.Cipher.doFinal(Cipher.java:2087)
    at Node.decryptData(Node.java:463)
    at Node.receiveMsgL(Node.java:451)
    at MiniServer.callLeaderR(MiniServer.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
这是我的解密代码:

private void decryptData(String PrivateK,byte[] data) throws IOException {
        System.out.println("\n-------DECRYPTION STARTED----");
        byte[] descryptedData = null;

        try {
            PrivateKey privateKey = readPrivateKeyFromFile(PrivateK);
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            descryptedData = cipher.doFinal(data);
            System.out.println("Decrypted Data: " + new String(descryptedData));

        } catch (Exception e) {
            e.printStackTrace();
        }   

        System.out.println("------DECRYPTION COMPLETED-----");      
    }
我尝试在加密时使用cipher.update(byte[]数据)。我有字符串数据,在加密时使用String.getByte()将其转换为字节数组。 若我使用更新方法,它会给我一个错误,即数据不能大于模数



请帮我解决这个问题。我无法在我的代码中找到错误。

像RSA这样的非对称密码设计用于加密短数据,通常是对称密钥,而大数据则用对称分组密码加密(对称密钥将与非对称密码交换)。在StackOverflow上有很多类似的问题和答案。是一个很好的答案。

像RSA这样的非对称密码设计用于加密短数据,通常是对称密钥,而大数据则用对称分组密码加密(对称密钥将与非对称密码交换)。在StackOverflow上有很多类似的问题和答案。是一个很好的答案。

像RSA这样的非对称密码设计用于加密短数据,通常是对称密钥,而大数据则用对称分组密码加密(对称密钥将与非对称密码交换)。在StackOverflow上有很多类似的问题和答案。是一个很好的答案。

像RSA这样的非对称密码设计用于加密短数据,通常是对称密钥,而大数据则用对称分组密码加密(对称密钥将与非对称密码交换)。在StackOverflow上有很多类似的问题和答案。是一个很好的答案。

RSA,特别是在ECB模式下(如果不指定完整的转换字符串,则为默认值),并不真正适合加密大量数据。您可以切换到AES(AES/CTR/PKCS5Padding应该是一个很好的起点),还是只需要使用RSA?@OlegEstekhin:Iirc RSA/ECB/*中的ECB只是一个虚拟值,必须放在那里,因为框架希望找到一种模式。@用户36。。。Rsa本身只能加密有限数量的数据(取决于密钥大小,大约250字节)。通常也不建议直接使用RSA加密您的使用数据,而只与之交换对称密钥。你的具体要求是什么?您可以使用SSL/TLS吗?RSA,特别是在ECB模式下(如果未指定完整的转换字符串,则为默认值),并不真正适合加密大量数据。您可以切换到AES(AES/CTR/PKCS5Padding应该是一个很好的起点),还是只需要使用RSA?@OlegEstekhin:Iirc RSA/ECB/*中的ECB只是一个虚拟值,必须放在那里,因为框架希望找到一种模式。@用户36。。。Rsa本身只能加密有限数量的数据(取决于密钥大小,大约250字节)。通常也不建议直接使用RSA加密您的使用数据,而只与之交换对称密钥。你的具体要求是什么?您可以使用SSL/TLS吗?RSA,特别是在ECB模式下(如果未指定完整的转换字符串,则为默认值),并不真正适合加密大量数据。您可以切换到AES(AES/CTR/PKCS5Padding应该是一个很好的起点),还是只需要使用RSA?@OlegEstekhin:Iirc RSA/ECB/*中的ECB只是一个虚拟值,必须放在那里,因为框架希望找到一种模式。@用户36。。。Rsa本身只能加密有限数量的数据(取决于密钥大小,大约250字节)。通常也不建议直接使用RSA加密您的使用数据,而只与之交换对称密钥。你的具体要求是什么?您可以使用SSL/TLS吗?RSA,特别是在ECB模式下(如果未指定完整的转换字符串,则为默认值),并不真正适合加密大量数据。您可以切换到AES(AES/CTR/PKCS5Padding应该是一个很好的起点),还是只需要使用RSA?@OlegEstekhin:Iirc RSA/ECB/*中的ECB只是一个虚拟值,必须放在那里,因为框架希望找到一种模式。@用户36。。。Rsa本身只能加密有限数量的数据(取决于密钥大小,大约250字节)。通常也不建议直接使用RSA加密您的使用数据,而只与之交换对称密钥。你的具体要求是什么?你能使用SSL/TLS吗?@divanovPerseidsOleg我只想加密一个单词之类的小数据。当我只发送一个非常小的字符串“msg”时,它会给我一个错误。您可以执行类似于
assert data.length*8<((RSAPrivateKey)privateKey).getmodules().bitLength()的操作
decryptData()
中检查数据长度。@divanovPerseidsOleg我只想加密一个单词之类的小数据。当我只发送一个非常小的字符串“msg”时,它会给我一个错误。您可以执行类似于
assert data.length*8<((RSAPrivateKey)privateKey).getmodules().bitLength()的操作
decryptData()
中检查数据长度。@divanovPerseidsOleg我只想加密一个单词之类的小数据。当我只发送一个非常小的字符串“msg”时,它会给我一个错误。您可以执行类似于
assert data.length*8<((RSAPrivateKey)privateKey).getmodules().bitLength()的操作
decryptData()
中检查数据长度。@divanovPerseidsOleg我只想加密一个单词之类的小数据。当我发送一个s时,它会给我错误