【问题标题】:How to authenticate user with SHA1 in Java如何在 Java 中使用 SHA1 对用户进行身份验证
【发布时间】:2017-02-03 11:50:55
【问题描述】:

我使用 Apache 库为 Linux 中的两个应用程序提供哈希密码。其中一个是 Pure-Ftp,另一个是我的应用程序。我在 Pure-Ftp passwd 文件中手动保存散列密码,它工作正常,用户可以使用给定用户/密码的 Ftp。
在我的应用程序中,我想验证用户,但没有任何 checkPassword(clearTextPassword, hashedPassword) 功能。

import org.apache.commons.codec.digest.Crypt;
...
...
...
String hashedValue = Crypt.crypt(clearTextPassword);
..

【问题讨论】:

  • 不,您需要编写该代码。您将散列密码存储在哪里?真的不清楚你在这里要求什么。 (目前尚不清楚您的密码和 FTP 之间有什么关系......)此外,我个人会避免使用 SHA-1 作为任何严肃工作的密码哈希。
  • 仅使用散列函数是不够的,仅添加盐对提高安全性无济于事。而是使用随机盐在 HMAC 上迭代大约 100 毫秒,然后将盐与哈希一起保存。使用PBKDF2(又名Rfc2898DeriveBytes)、password_hash/password_verifyBcrypt 等函数和类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。保护您的用户很重要,请使用安全的密码方法。
  • 我认为 SHA1 512 是安全的,不是吗?我不想使用 bash 功能。我想在Java中生成一次哈希密码,然后将其保存在数据库和Pure-Ftp的passwd文件中。

标签: java linux authentication sha1 pureftpd


【解决方案1】:

要验证密码,您可以使用 savedHashedPassword 作为盐对给定的简单密码进行哈希处理:

  private static boolean checkPassword(String password, String hashedPassword) {
       String tmpHashedPassword = Crypt.crypt(password, hashedPassword);
       return hashedPassword.equalsIgnoreCase(tmpHashedPassword);

}

Crypt.crypt(password) 使用最强的 crypt(3) 算法计算摘要。使用随机盐和默认算法(当前为 SHA-512)。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2017-08-24
    • 1970-01-01
    • 2019-05-02
    • 2013-01-19
    • 2018-12-08
    相关资源
    最近更新 更多