简单的用户名和密码验证java

时间:2016-08-08 04:07:23

标签: java login md5 salt

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

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

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

编辑一种可能的解决方案,如果我能让它发挥作用。

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());

1 个答案:

答案 0 :(得分:1)

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

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

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

原因是如果用户重复使用相同的密码,那么任何具有密码哈希数据可见性的攻击者都会立即明白这一点。此外,如果您的系统是公开可用的,则应用程序的每个实例都将以完全相同的方式存储admin用户的哈希值,这意味着攻击者将能够使用admin预先构建彩虹表作为盐。

有关详细信息和指导,请参阅OWASP Cheat Sheet on Password Storage