des解密 Input length not multiple of 8 bytes 错误

Jochen_qin 2016-12-28 09:03:47
使用Java自带的库解密,密文由别人提供,当密文是64位的时候能够解密,但是当密文非64位的时候就出现javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes错误提醒,请问一下这是什么原因?
代码如下:
private final static String DES = "DES";
public static String decrypt(String data, String key) throws IOException, Exception {
if (data == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] buf = decoder.decodeBuffer(data);
byte[] bt = decrypt(buf, key.getBytes());
return new String(bt);
}

private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();

// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);

// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

return cipher.doFinal(data);
}
...全文
1350 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdm_12 2017-11-22
  • 打赏
  • 举报
回复
我用的也是DES,在windows上加解密都没问题,在linux加密没问题,解密报同样的错误。不知道如何解决,还请大神帮忙说一下
Jochen_qin 2017-09-19
  • 打赏
  • 举报
回复
已解决,必须是8的倍数,出错是因为获得到密文中的一些符号如+、/变成了html码
正负 2016-12-30
  • 打赏
  • 举报
回复
DES 算法就是这么要求的
ps45221 2016-12-30
  • 打赏
  • 举报
回复
提示已经很明显了啊,要8的倍数

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧