java 7中的填充异常:引起:javax.crypto.BadPaddingException:给定最终块未正确填充

时间:2016-02-23 14:44:22

标签: java encryption des badpaddingexception

您好我正在使用tripedes键从输入流中读取并写入输出流。 在java7 / 8中获取此execption:引起:javax.crypto.BadPaddingException:给定最终块未正确填充

Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.ENCRYPT_MODE, key);

// Create a special output stream to do the work for us
CipherOutputStream cos = new CipherOutputStream(out, cipher);

// Read from the input and write to the encrypting output stream
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
    cos.write(buffer, 0, bytesRead);
}
cos.close();

任何人都可以告诉我cipher.doFinal中可能出现的错误吗?

更新,从注释中复制的加密代码:

app.get('/search/:id', function(req,res){
    searchController.findByName(req, res);
    // console.log(res);                        //--->Check res is right
    res.render('search', { test: 'test' });
});

1 个答案:

答案 0 :(得分:0)

如果输入数据不总是块大小的倍数,则必须将填充添加到输入数据中;指定填充,PKCS#5是DES / 3DES的首选填充。

未完全指定getInstance调用,缺少模式和填充选项。添加完整的规范,例如:“DESede / ECB / PKCS5Padding(168)”。请参阅Class Cipher documentation

不要在新代码中使用3DES,它是不安全的,也不使用ECB模式,它也不安全,请参阅ECB mode,向下滚动到企鹅。