Java 为什么要随机生成aes密钥?

Java 为什么要随机生成aes密钥?,java,encryption,aes,Java,Encryption,Aes,当你想加密一些东西时,你不想让密钥解密由你决定,而不是由某个随机数生成器生成吗 我在stackoverflow post中看到了这个代码。但是我不希望随机生成密钥,我希望用户被要求输入密钥,并在此基础上进行加密 我应该如何修改代码,有什么建议吗 SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec spec = new PBEKeySpec(password, salt, 10

当你想加密一些东西时,你不想让密钥解密由你决定,而不是由某个随机数生成器生成吗

我在stackoverflow post中看到了这个代码。但是我不希望随机生成密钥,我希望用户被要求输入密钥,并在此基础上进行加密

我应该如何修改代码,有什么建议吗

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(password, salt, 1024, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

加密的整体思想是,除了需要的方之外,没有人能够推断出密钥,因为密钥是唯一的秘密


如果您自己选择密钥,您可能会遵循某种习惯模式,因此,如果您合成一个密钥,则会暴露该模式,攻击者可以利用该信息简化查找您使用的其他密钥的过程。使用一个好的随机数生成器可以消除这种可能性,并使加密更加有效。

加密的整体思想是,除了需要的方之外,没有人能够推断出密钥,因为密钥是唯一的秘密


如果您自己选择密钥,您可能会遵循某种习惯模式,因此,如果您合成一个密钥,则会暴露该模式,攻击者可以利用该信息简化查找您使用的其他密钥的过程。使用一个好的随机数生成器可以消除这种可能性,并使加密更加有效。

您显示的代码不会生成随机密钥。生成的密钥是密码的一个函数,每次使用给定密码时都会完全相同

在这种情况下,应要求用户输入
密码
。该密码用作算法的种子,该算法可确定地生成一个字节字符串,该字符串可用作加密密钥


对于每个操作,都应该随机选择一些内容:CBC模式下用于密码的初始化向量。即使使用同一密钥加密同一明文,也会产生不同的密文。

显示的代码不会生成随机密钥。生成的密钥是密码的一个函数,每次使用给定密码时都会完全相同

在这种情况下,应要求用户输入
密码
。该密码用作算法的种子,该算法可确定地生成一个字节字符串,该字符串可用作加密密钥


对于每个操作,都应该随机选择一些内容:CBC模式下用于密码的初始化向量。即使使用同一密钥加密同一明文,也会产生不同的密文。

此外,通过随机生成,密钥通常在完整的“密钥空间”中拾取,因此,对于用户定义的密钥,这些密钥通常仅限于字母和数字,你可以要求用户输入更多的字母和数字,并对输入进行哈希处理,使其具有必要的宽度,以此来弥补这一不足。此外,通过随机生成,密钥通常在完整的“密钥空间”中拾取,而对于用户定义的密钥,这些密钥通常仅限于字母和数字。嗯,您可以通过要求用户提供更多的字母和数字,并将输入哈希为必要的宽度来补偿这一点。