用户在春天忘记了密码替代方法

时间:2013-10-22 04:18:08

标签: java spring-security

我想允许为用户提出安全问题。我正在使用Spring3并且不确定是否存在执行此操作的标准方法。任何人都可以指出我这样的标准它存在吗?

1 个答案:

答案 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 ......这些安全问题中有太多是可预测的或容易猜到的。最喜欢的颜色,他们毕业的年份等...我从来没有用正确的信息回答这些问题。我建议您在需要时找到另一种重置密码的方法。