我如何在两者之间切换 AES-128
, AES-192
以及 AES-256
. 我现在的实现只使用 AES-128
```
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
IvParameterSpec ivspec = new IvParameterSpec(initialztnVector);
cipher.init(Cipher.ENCRYPT_MODE, key, ivspec);
byte[] enc = cipher.doFinal(toEncrypt);
正在更改为 `Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");` 它会使 `AES-256` 可能吗?我该怎么做才能拥有 `AES-192`
2条答案
按热度按时间piok6c0g1#
正如@zaph已经提到的,只要提供一个256位的键作为输入,它就可以工作(不管使用什么模式(例如cbc)或填充)。
另外,正如@kevino所提到的,您可能需要安装无限强度策略文件(这里是针对java8)来支持256位aes安全性。
但是,有时,特别是当您需要分发软件时,并不总是能够更改客户端计算机上的策略文件。尽管不建议这样做,因为您可能会违反java许可协议,但您可以使用反射绕过限制,而不更改默认策略文件。从这个链接移植,只需使用这个将在类加载期间运行的代码段。然后,可以使用任何支持的密钥大小。
qnakjoqk2#
库根据所提供密钥的长度决定aes密钥长度。草率的,明确的指定会更清楚。确保提供的密钥长度正确,不要依赖于密钥填充。
填充与键大小没有关系。如果纯文本输入数据长度并非总是(或先验地)块大小的精确倍数(aes为16字节),则需要填充。
注意@kevino关于使用正确的.jar文件的注解。