是AES密钥随机?

use*_*654 4 java aes

可以通过此代码生成AES密钥

KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128); 
Run Code Online (Sandbox Code Playgroud)

如果我有一个"非常可靠"的方法来生成随机数,我可以用这种方式使用它

SecureRandom rnd = new SecureRandom();
byte[] key = new byte[16];
rnd.nextBytes(key);
Run Code Online (Sandbox Code Playgroud)

这种方法可靠获得的关键是什么?

或者它只能由一些SPECIAL算法生成

may*_*Van 11

AES密钥可以是任何128位.无论创建它的方法如何,它都应该是实际上不可取的.

例如:

SecureRandom sr = new SecureRandom()

key = new byte[16];
iv = new byte[16];

sr.nextBytes(key);
sr.nextBytes(iv);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key,"AES"), new IvParameterSpec(IV));
Run Code Online (Sandbox Code Playgroud)

SecretKeySpec顺便说一句,它只是一个字节[]的薄包装器 - 它不会以任何方式转换密钥.没有"特殊算法".


ala*_*inm 1

您可以使用SecureRandom添加随机算法:

    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    SecureRandom random = new SecureRandom(); // cryptograph. secure random 
    keyGen.init(random); 
    SecretKey secretKey = keyGen.generateKey();
Run Code Online (Sandbox Code Playgroud)