我的代码被一个bug卡住了,它不能让我正确解密!我只传递了8个字节的数据给dataBytes,我正在传递一个24字节的密钥到keyBytes。我试图返回解密的数据作为字节数组。我一直得到坏填充异常
谢谢!
下面是代码片段:private static byte[] DESEdeDecrypt(byte[] keyBytes, byte[] dataBytes){
byte[] decryptedData = null;
try{
DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes, 0);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey key = keyFactory.generateSecret(keySpec);
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.DECRYPT_MODE, key);
decryptedData = cipher.doFinal(dataBytes);
}
catch(Exception e){System.out.println(e);}
return decryptedData;
您必须使用与加密相同的填充来解密。最好显式地设置它,而不是依赖默认值。最好还指定两端的模式:
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
DESede是缓慢和过时的。除非为了与旧代码兼容,否则不应该使用它。对于新工作,最好使用AES。