如何选择AES加密的强度,即128,256,512等?

时间:2015-12-07 12:34:15

标签: java encryption aes symmetric-key

下面是我如何加密java中的文本的示例,尽管加密有效。我似乎无法弄清楚如何修改加密级别,即128,256,512等。

代码:

byte keySelectedByUser[] = selectedKey.getBytes();
SecretKeySpec secretKey = new SecretKeySpec(keySelectedByUser, "AES");

Cipher cipher;

cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING");

cipher.init(Cipher.ENCRYPT_MODE, secretKey);

byte[] encrypted = cipher.doFinal(stringToEncrypt.getBytes());

我怎样才能在java中做到这一点?

2 个答案:

答案 0 :(得分:1)

使用SecretKey。例如:

final int KEY_LENGTH = 256;
final SecretKeyFactory factory = SecretKeyFactory.getInstance("YourPreferredAlgorithm");
final SecretKey key = factory.generateSecret(new PBEKeySpec(pass, salt, iterations, KEY_LENGTH));

然后使用SecretKey获取SecretKeySpec

final SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES");

答案 1 :(得分:0)

没有AES-512。 AES仅支持128,192和256位的密钥大小。在Java中,您可以通过传入该大小的密钥来选择适当的密钥大小:byte[]长度为16,24或32.

如果您有密码并且想从中拉伸密钥,则需要使用基于密码的密钥派生函数,例如PBKDF2,bcrypt,scrypt或Argon2。请务必根据您的需要调整迭代次数或成本因素:尽可能高,不会给用户带来太多不便。