为什么AES 128加密会扩展数据?

时间:2016-03-24 14:42:20

标签: java encryption cryptography byte aes

我使用以下代码加密数据。我的输入是16个字节,密钥是16个字节,但我得到的输出(加密数据)是32个字节。为什么呢?

 public static byte[] encrypt(byte[] plainText, byte[] key)  {
try {
  byte[] passwordKey128 = Arrays.copyOfRange(key, 0, 16);
  SecretKeySpec secretKey = new SecretKeySpec(passwordKey128, "AES");
  Cipher cipher = Cipher.getInstance("AES");
  cipher.init(Cipher.ENCRYPT_MODE, secretKey);
  byte[] cipherText = cipher.doFinal(plainText);
  // String encryptedString = Base64.getEncoder().encodeToString(cipherText);
  return cipherText;

可能是什么原因? AES会添加一些数据吗?

1 个答案:

答案 0 :(得分:2)

您通过Cipher方法获取Cipher.getInstance(transformation)对象,其中转换的格式为:

"algorithm/mode/padding" or
"algorithm"

执行此操作时,实现将搜索系统中的加密提供程序列表,并确定是否有任何实现支持此操作。如果未指定模式和填充,则由密码提供程序决定使用哪种默认模式和填充。

根据this,例如,SunJCE默认为ECB作为默认模式, PKCS5Padding

由于 PKCS5Padding 总是至少添加一个字节,因此它将超过块的限制推送您的16个字节,并且需要两个块。