簡體   English   中英

javax.crypto.BadPaddingException:消息大於模數

[英]javax.crypto.BadPaddingException: Message is larger than modulus

我正在開展一個項目,我需要在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 [] data)。 我有String數據,並在加密時使用string.getByte()將其轉換為字節數組。 如果我使用update方法,它會給我一個IllegalBlockException錯誤,即數據不能大於模數。

請幫我解決這個問題。 我無法在代碼中找到錯誤。

像RSA這樣的非對稱密碼被設計用於加密短數據,通常是對稱密鑰,而大數據用對稱分組密碼加密(對稱密鑰將與非對稱密碼交換)。 StackOverflow上有很多類似的問題和答案。 這個是一個提供了很好的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM