gpt4 book ai didi

java - 如何从 AES-256 切换到 AES-128?

转载 作者:行者123 更新时间:2023-12-01 18:43:07 31 4
gpt4 key购买 nike

关于 AES 有很多问题,但我有以下问题。我目前正在使用以下 AES 实现来加密数据

byte [] PRFkey = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
byte [] plaintext = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

SecretKeySpec encryptionKey=new SecretKeySpec(PRFkey, "AES");
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, encryptionKey);
byte[] encryptedData=cipher.doFinal(plaintext);

结果是 32 字节(256 位)。所以我使用 AES-256。这个实现对我来说太慢了。如何切换到 AES-128?我不需要任何填充或操作模式或 key 散列。

提前谢谢您。

最佳答案

您已经在使用 128 位 AES。这由您传递给 Cipher.init() 的 key 长度决定,在您的示例中为 16 个字节(128 位)。

输出的大小将取决于您的填充模式(以及输入数据的大小)。由于您忽略指定操作模式或填充,您的 JCE 提供程序可能默认为“AES/ECB/PKCS5Padding”。 PKCS #5 填充总是会在输出的大小上添加一个额外的 block ,因此您收到的是 32 字节的输出,而不是 16 字节。

绝不允许您的提供商为您选择默认值。相反,明确指定模式和填充:

Cipher cipher=Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, encryptionKey);
byte[] encryptedData=cipher.doFinal(plaintext); // will be 16 bytes

请记住,如果您不指定填充,则您的输入数据必须始终是 16 字节的精确倍数。另请注意,ECB 模式具有相同的明文值将产生相同的密文值的属性。这在密码系统中是很少见的。

关于java - 如何从 AES-256 切换到 AES-128?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19061658/

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