代码之家  ›  专栏  ›  技术社区  ›  David Ehrmann

Java未添加PKCS5填充

  •  0
  • David Ehrmann  · 技术社区  · 7 年前

    PKCS5 and PKCS7

    当我在Java中用128位AES和PKCS5加密8个字节(小于一个块)时,结果是 doFinal() 只有8个字节。

    PKCS7是否未应用,或者我是否遗漏了它的工作原理?

    Random secureRandom = new SecureRandom();
    
    byte[] ctr = new byte[16];
    byte[] keyBytes = new byte[16];
    
    secureRandom.nextBytes(ctr);
    secureRandom.nextBytes(keyBytes);
    
    IvParameterSpec ivSpec = new IvParameterSpec(ctr);
    Key key = new SecretKeySpec(keyBytes, "AES");
    
    byte[] plainText = new byte[8];
    
    Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
    
    byte[] cipherText = cipher.doFinal(plainText);
    System.out.println(cipherText.length);
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   erickson    7 年前

    您正在使用CTR(计数器)模式,这是一种“流密码”模式。密码文本的长度将与纯文本相同。在CTR模式下,通过加密连续计数器值创建伪随机流。该流与纯文本流异或生成密文流。

    实际上,我有点惊讶,加密提供程序接受任何规范,但 NoPadding 结合CTR模式。