下面是我如何加密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中做到这一点?
答案 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。请务必根据您的需要调整迭代次数或成本因素:尽可能高,不会给用户带来太多不便。