java aes加密,输出比输入多一个块,没有填充

时间:2013-04-17 08:11:34

标签: java size aes output

所以我正在研究这个设备,我倾向于使用预定义的aes函数制作我自己的CBC和CTR算法,现在我似乎有问题,输出的大小总是比输入更多的块(输入64,输出80,等等)这里是我正在使用的代码,十六进制到字节转换和字节到十六进制:

public static String encrypt(String PT,String skey) throws Exception, NoSuchPaddingException {
      Cipher cipher = Cipher.getInstance("AES");
        SecretKeySpec key = new SecretKeySpec(skey.getBytes("ascii"), "AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] val = hexToBytes(PT);
        byte[] encVal = cipher.doFinal(val);

        return byteToString(encVal);
}

转换函数完全正常工作,val大小为n * 16字节,encVal大小为(n + 1)* 16字节

1 个答案:

答案 0 :(得分:0)

这是由于填充。

Cipher.getInstance("AES");

使用特定于提供程序的默认值进行模式和填充。对于JDK 6& 7,这将默认为AES/ECB/PKCS5Padding