我想允许对用户提出安全问题。我正在使用 Spring3,但不确定是否存在执行此操作的标准方法。任何人都可以指出它存在的这种标准吗?
问问题
129 次
1 回答
0
我不熟悉涵盖此内容的标准,但我建议您像对待密码一样对待安全问题......
确保您打开 autocomplete="off" 以便浏览器不会记住他们的答案
为答案生成一个加盐散列(或者您可以重复使用该散列作为他们的密码)
public byte[] generateSalt() throws NoSuchAlgorithmException { // VERY important to use SecureRandom instead of just Random SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); // Generate a 8 byte (64 bit) salt as recommended by RSA PKCS5 byte[] salt = new byte[8]; secureRandom.nextBytes(salt); return salt; }
加密答案
public static byte[] getEncryptedAnswer(String answer, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException { KeySpec spec = new PBEKeySpec(answer.toCharArray(), salt, 20000, 160); SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); return secretKeyFactory.generateSecret(spec).getEncoded(); }
存储加盐哈希和加密答案。此时,您几乎可以像使用密码一样使用此问题的答案。
综上所述,我必须同意 jHilscher 的观点……这些安全问题中有太多是可以预测或容易猜到的。最喜欢的颜色、毕业年份等等……我从来没有用正确的信息回答这些问题。我建议您在需要时找到其他方法来重置密码。
于 2013-12-11T17:54:09.347 回答