gpt4 book ai didi

Java 不添加 PKCS5 填充

转载 作者:行者123 更新时间:2023-12-02 02:37:32 25 4
gpt4 key购买 nike

我对PKCS5 and PKCS7的理解填充是在加密之前向纯文本添加字节,以便最后一个 block 已满。一旦密文被解密,最后一个 block 就会被检查,填充字节会标记哪些字节是填充的,哪些是纯文本的。

当我在 Java 中使用 128 位 AES 和 PKCS5 加密 8 个字节(小于一个 block )时,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);

8

最佳答案

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

实际上,我有点惊讶的是,加密提供程序接受除了 NoPadding 之外的任何规范与 CTR 模式的结合。

关于Java 不添加 PKCS5 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com