我想允许为用户提出安全问题。我正在使用Spring3并且不确定是否存在执行此操作的标准方法。任何人都可以指出我这样的标准它存在吗?
答案 0 :(得分: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 ......这些安全问题中有太多是可预测的或容易猜到的。最喜欢的颜色,他们毕业的年份等...我从来没有用正确的信息回答这些问题。我建议您在需要时找到另一种重置密码的方法。