1

当您想加密某些东西时,您不希望解密的密钥由您决定,而不是由某个随机数生成器生成吗?

我在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");
4

2 回答 2

1

加密的整个想法是,除了需要的各方之外,没有人可以推断出密钥,因为密钥是唯一的秘密。

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

于 2009-11-19T06:59:06.977 回答
0

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

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

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

于 2009-11-19T07:17:58.740 回答