我正在尝试创建我的第一个登录页面作为学习练习。

我的计划是使用例如用户名的盐预散列密码。将其存储在文本文件中,然后当用户登录时,我将使用相同的盐对密码进行哈希处理并将结果与​​文本文件进行比较。

我是安全方面的完整初学者,所以我不知道这是否安全?小型应用程序的规范是什么?如果不推荐这种方法,什么是合适的简单替代方法?

编辑一种可能的解决方案,如果我可以使它工作。

String unpwfield;
    unpwfield = userId.getText()+passwordfield.getText();
    if (BCrypt.checkpw(unpwfield, passwordhash))
        System.out.println("It matches");
    else
        System.out.println(userId.getText()+passwordfield.getText());

最佳答案

对于密码存储,您将要使用慢速哈希算法。加密哈希值太快,并且不会降低攻击者在脱机密码猜测中的速度。例如,bcrypt通常是最适合使用的算法。

Bcrypt生成自己的盐,因此您不必担心生成这些盐的安全方法。

我会避免使用用户名作为盐。如果避免多次使用,则避免使用相同的字节表示形式存储相同的密码。

原因是,如果用户重用了相同的密码,那么对于任何对密码哈希数据具有可见性的攻击者而言,它立即显而易见。同样,如果系统公开可用,则应用程序的每个实例将以完全相同的方式存储admin用户的哈希值,这意味着攻击者将能够使用admin作为预构建彩虹表。

有关更多信息和指导,请参见OWASP Cheat Sheet on Password Storage

关于java - 简单的用户名和密码验证Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38821149/

10-11 22:28
查看更多