鉴于最终块未正确填充

时间:2013-10-07 20:03:18

标签: java encryption

我想加密一个类型为EnteredDetails(java bean)的arraylist并将其序列化为一个文件。我正在关注AES-128位加密的链接:http://www.code2learn.com/2011/06/encryption-and-decryption-of-data-using.html

要使用方法加密aes类,我必须将arrarylist转换为字节数组,使用加密方法加密并使用fileoutputstream将其写入文件。

现在在deserialize方法中,我使用fileinputstream读取加密的字节数组,使用decrypt方法解密字节数组,然后使用objectinputstream从解密的字节数组中取回我的arraylist。

这是我的序列化方法:

    public void serialize() {
    try {
        ByteArrayOutputStream b = new ByteArrayOutputStream();
        ObjectOutputStream o = new ObjectOutputStream(b);
        o.writeObject(ar5.userDetails);
        AES_Encryption en = new AES_Encryption();
        byte[] data=en.encrypt(b.toByteArray());
        FileOutputStream fos = new FileOutputStream("user.txt");
        fos.write(data);
        b.close();
        fos.close();
        o.close();
      } catch (Exception e) {
        e.printStackTrace();
       }
   }

已编辑的反序列化方法:

     ArrayList<EnteredDetails> load() {
    try {
        File file=new File("user.txt"); 
        FileInputStream fis = new FileInputStream("user.txt");
        //            System.out.println("after fisssssss");
       //            ObjectInputStream ois = new ObjectInputStream(fis);
       //            byte [] d =(byte []) ois.readObject();
        byte fileContent[] = new byte[(int)file.length()];
        AES_Encryption enc = new AES_Encryption();
        byte[] data = enc.decrypt(fileContent);
        ByteArrayInputStream b = new ByteArrayInputStream(data);
        ObjectInputStream ois2 = new ObjectInputStream(b);
        ArrayList<EnteredDetails> al = (ArrayList<EnteredDetails>) ois2.readObject();
        fis.close();
        b.close();
        ois2.close();
        return al;
    } catch (Exception e) {
        System.out.println("exception in method load deseialize class " +                    e.getMessage());
        return null;
    }
}

错误:给定最终块未正确填充

1 个答案:

答案 0 :(得分:0)

您必须按相反的顺序应用过滤器。

您必须先解密加密数据,然后才能读取对象流。

相关问题