Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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:非PKCS#1块类型2或零填充_Java_Encryption_Rsa_Modulus_Exponent - Fatal编程技术网

javax.crypto.BadPaddingException:非PKCS#1块类型2或零填充

javax.crypto.BadPaddingException:非PKCS#1块类型2或零填充,java,encryption,rsa,modulus,exponent,Java,Encryption,Rsa,Modulus,Exponent,我在解密RSA加密文本时出错。下面是我正在使用的代码。请注意,这两个方法将从不同的位置调用 系统。为了PoC,我在同一个java类中实现了PoC 代码 进口 方法 错误 您的命名系统非常混乱:您在encryptWithRsa中多次编写“解密”,而实际上您的意思是“加密”。无论如何,您需要公钥指数e来创建公钥,而不是您当前拥有的私钥指数d。谢谢您的回复。我不明白你说的话。你能解释一下你提到的是哪一行以及有什么变化吗你应该使用的公共指数是什么?谢谢你的帮助@ArtjomB,谢谢你的回复。我得到了公开

我在解密RSA加密文本时出错。下面是我正在使用的代码。请注意,这两个方法将从不同的位置调用 系统。为了PoC,我在同一个java类中实现了PoC

代码

进口

方法

错误


您的命名系统非常混乱:您在
encryptWithRsa
中多次编写“解密”,而实际上您的意思是“加密”。无论如何,您需要公钥指数e来创建公钥,而不是您当前拥有的私钥指数d。谢谢您的回复。我不明白你说的话。你能解释一下你提到的是哪一行以及有什么变化吗你应该使用的公共指数是什么?谢谢你的帮助@ArtjomB,谢谢你的回复。我得到了公开指数,代码现在运行良好。您的命名系统非常混乱:您在
encryptWithRsa
中编写了几次“解密”,而实际上您的意思是“加密”。无论如何,您需要公钥指数e来创建公钥,而不是您当前拥有的私钥指数d。谢谢您的回复。我不明白你说的话。你能解释一下你提到的是哪一行以及有什么变化吗你应该使用的公共指数是什么?谢谢你的帮助@ArtjomB,谢谢你的回复。我得到了公众指数,代码现在运行良好。
import java.math.BigInteger;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.logging.Logger;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;

import com.ibm.ws.util.Base64;    
public String decryptUsingRSA(String encryptedString) {

    byte[] encryptedBytes = null;
    String modulusElem = "......";
    String dElem = ".....";
    String result = "";

    try {
        /*
         * ================================================================================================
         *      DECODING FROM BASE64
         * ================================================================================================
         */
        logger.info("decryptUsingRSA : DECODING FROM BASE64");
        byte[] modBytes = Base64.decode(modulusElem);
        byte[] dBytes = Base64.decode(dElem);
        encryptedBytes = Base64.decode(encryptedString);

        /*
         * ================================================================================================
         *      CONVERTING TO BIGINTEGER
         * ================================================================================================
         */
        logger.info("decryptUsingRSA : CONVERTING TO BIGINTEGER");
        BigInteger modules = new BigInteger(1, modBytes);
        BigInteger d = new BigInteger(1, dBytes);

        /*
         * ================================================================================================
         *      INSTANTIATING KEYFACTORY AND CIPHER
         * ================================================================================================
         */
        logger.info("decryptUsingRSA : INSTANTIATING KEYFACTORY AND CIPHER");
        KeyFactory factory = KeyFactory.getInstance("RSA");
        Cipher cipher = Cipher.getInstance("RSA");

        /*
         * ================================================================================================
         *      GENERATING PRIVATE KEY OBJECT
         * ================================================================================================
         */
        logger.info("decryptUsingRSA : GENERATING PRIVATE KEY OBJECT");
        RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, d);
        PrivateKey privKey = factory.generatePrivate(privSpec);

        /*
         * ================================================================================================
         *      DECRYPTING
         * ================================================================================================
         */
        logger.info("decryptUsingRSA : DECRYPTING");
        cipher.init(Cipher.DECRYPT_MODE, privKey);
        byte[] decrypted = cipher.doFinal(encryptedBytes);

        result = new String(decrypted);
        logger.info("decryptUsingRSA : result = " + result);
    } catch (Exception ex) {
        logger.info("decryptUsingRSA : Exception occurred ");
        ex.printStackTrace();
    }

    return result;
}

public String encryptUsingRSA(String decryptedString) {

    decryptedString = "Encrypted using RSA";
    String modulusElem = "....";
    String dElem = "....";
    String result = "";

    try {
        /*
         * ================================================================================================
         *      DECODING FROM BASE64
         * ================================================================================================
         */
        logger.info("encryptUsingRSA : Step 1/5 - DECODING FROM BASE64");   
        byte[] modBytes = Base64.decode(modulusElem);
        byte[] dBytes = Base64.decode(dElem);

        /*
         * ================================================================================================
         *      CONVERTING TO BIGINTEGER
         * ================================================================================================
         */
        logger.info("encryptUsingRSA : Step 2/5 - CONVERTING TO BIGINTEGER");   
        BigInteger modules = new BigInteger(1, modBytes);
        BigInteger d = new BigInteger(1, dBytes);

        /*
         * ================================================================================================
         *      INSTANTIATING KEYFACTORY AND CIPHER
         * ================================================================================================
         */
        logger.info("encryptUsingRSA : Step 3/5 - INSTANTIATING KEYFACTORY AND CIPHER");    
        KeyFactory factory = KeyFactory.getInstance("RSA");
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        // tried "RSA", "RSA/NONE/PKCS1Padding" etc but same error

        /*
         * ================================================================================================
         *      GENERATING PRIVATE KEY OBJECT
         * ================================================================================================
         */
        logger.info("encryptUsingRSA : Step 4/5 - GENERATING PRIVATE KEY OBJECT");
        RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, d);
        PrivateKey privKey = factory.generatePrivate(privSpec);
        //logger.info("encryptUsingRSA : Step 4/5 - privKey = " + Base64.encode(privKey.getEncoded()));

        RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(modules, d);
        PublicKey pubKey = factory.generatePublic(publicSpec);
        //logger.info("encryptUsingRSA : Step 4/5 - pubKey = " + Base64.encode(pubKey.getEncoded()));

        /*
         * ================================================================================================
         *      DECRYPTING
         * ================================================================================================
         */
        logger.info("encryptUsingRSA : Step 5/5 - DECRYPTING");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] decryptedByteArray = decryptedString.getBytes();
        byte[] encryptedbyteArray = cipher.doFinal(decryptedByteArray);

        decryptUsingRSA(Base64.encode(encryptedbyteArray));
    } catch (Exception ex) {
        logger.info("encryptUsingRSA : ERROR encrypting input: " + ex.getMessage());
        ex.printStackTrace();
    }

    return result;
}
INFO: decryptUsingRSA : Exception occurred 
javax.crypto.BadPaddingException: Not PKCS#1 block type 2 or Zero padding
at com.ibm.crypto.provider.RSA.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Unknown Source)