1

下面是我如何在 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中做到这一点?

4

2 回答 2

2

使用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");
于 2015-12-07T12:41:33.997 回答
1

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

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

于 2015-12-07T13:19:54.257 回答