即使我正在使用填充imy算法,也要获取填充异常

时间:2019-10-17 14:37:24

标签: java encryption blowfish

我不断收到异常“ javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数”。我在Google周围搜索了一下,发现我需要使用此算法“ Blowfish / ECB / PKCS5Padding“;”同时进行加密和解密,因为它必须是8的倍数,但问题仍然存在。我先加密一些数据,然后对其进行序列化然后反序列化,然后开始认为加密有问题吗?但是每次我加密都没有异常。

我尝试使用IVspec方法,但是由于我使用的是ECB,所以我得到了例外,说我不应该使用该方法。这是解密代码的代码

    try {

        cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); // algoritm som används
        cipher.init(Cipher.DECRYPT_MODE, secretKey); // väljer att man ska dekryptera

        FileInputStream fs = new FileInputStream(encryptedData);

        int numberOfByteRead;
        CipherInputStream in = new CipherInputStream(fs, cipher);

        in.read(data);

        decryptedDataOut = cipher.doFinal(data); //enkrypterade datan blir dekrypterad
        in.close();
    } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException  | IOException   e) {
        e.printStackTrace();
    } 

这是加密和序列化的代码         密码cipher = null;

    try {
        cipher = Cipher.getInstance(algorithm); // Krypterar med blowfish
        cipher.init(Cipher.ENCRYPT_MODE, secretKey); // krypterar
        out = cipher.doFinal(in.getBytes()); // krypterar datan i strängen in

    } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException | IllegalBlockSizeException | BadPaddingException   e) {
        e.printStackTrace();
    }

    try { // Skriver den krypterade datan till en ny fil med namnet på encryptedData


        FileOutputStream fs = new FileOutputStream(encryptedData);

        CipherOutputStream output = new CipherOutputStream(fs, cipher);
        output.write(out);
        output.flush();
        output.close();



        System.out.println("Encrypted \"" + data + "\" to file " + encryptedData);

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } 
    }

0 个答案:

没有答案