所以我正在研究这个设备,我倾向于使用预定义的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字节
答案 0 :(得分:0)
这是由于填充。
Cipher.getInstance("AES");
使用特定于提供程序的默认值进行模式和填充。对于JDK 6& 7,这将默认为AES/ECB/PKCS5Padding
。