当你想要加密某些东西时,你不希望密钥解密由你决定而不是由某个随机数生成器生成?
我在stackoverflow帖子中看到了这段代码。但我不希望随机生成密钥我希望用户被要求输入密钥,在此基础上加密应该发生..
任何建议我应该如何修改代码?
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");
答案 0 :(得分:1)
加密的整个想法是,除了所需的各方之外,没有人可以推断出密钥,因为密钥是唯一的秘密。
如果您自己选择密钥,则可能会遵循一些习惯模式,因此如果您将一个密钥编译为暴露该模式,则攻击者可以使用该信息来简化查找您使用的其他密钥。使用一个好的随机数发生器可以消除这种可能性,并使加密效率更高。
答案 1 :(得分:0)
您显示的代码不会生成随机密钥。生成的密钥是密码的函数,每次使用给定密码时都会完全相同。
在这种情况下,应要求用户输入password
。该密码用作算法的种子,该算法确定性地生成可用作加密密钥的字节串。
应该为每个操作随机选择一些内容:用于CBC模式下的密码的初始化向量。即使使用相同的密钥加密相同的明文,这也会产生不同的密文。