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

Simple username and password validation java

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

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

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

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

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