java - 从 SHA-1 更改为 SHA-512

标签 java security sha

我正在尝试从 SHA-1 更改为 SHA-512 以获得更好的安全性,但我不完全清楚如何进行更改。

这是我使用 SHA-1 的方法:

public static String sha1Convert(String password) {
            try {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(password.getBytes("UTF-8"));
                return byteToHex(crypt.digest());
            } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {
                Logger.getLogger(UserLoginManaged.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }
        }

这是我一直在做的方法,但我不确定它是否完全有效,因为(如果我做错了什么,我很抱歉)。我正在将 sha-1 更改为 sha-512,但是当我尝试登录我的应用程序时,它告诉我密码错误。所以我不确定是我的方法错误还是我只是对某些事情一无所知。

public static String sha512Convert(String password) {
    try {
        MessageDigest sh = MessageDigest.getInstance("SHA-512");
        sh.reset();
        sh.update(password.getBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : sh.digest()) sb.append(Integer.toHexString(0xff & b));
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        Logger.getLogger(UserLoginManaged.class.getName()).log(Level.SEVERE, null, e);
        throw new RuntimeException(e);
    }
}

最佳答案

从密码安全的角度来看,SHA-1 和 SHA-512 之间没有什么区别,两者都可以在 1us 内完成计算。从 SHA-1 升级是有原因的,但这不是一个。

不要使用哈希来保护密码,请使用 PBKDF2(又名 Rfc2898DeriveBytes)、password_hash/password_verify、Bcrypt 和类似函数等函数。

如今,通过尝试 1000 万单词列表中的密码即可“破解”密码。在笔记本电脑上散列密码的时间< 1us,攻击者的速度将快几个数量级。除非是鱼叉式捕鱼,否则攻击者会对最简单的 90% 感到满意。

重点是让攻击者花费大量时间通过暴力破解来查找密码。

保护您的用户很重要,请使用安全的密码方法。

关于java - 从 SHA-1 更改为 SHA-512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41707503/

相关文章:

java - 将rabbitMQ消息日志分离到不同的日志文件中

c# - 类似于 C# 的 Java SimpleDateFormat

django - 在 GAE/python 中存储密码的最佳实践

java - Tomcat Servlet 安全性

java - 你能在 PHP 中获得同样的 Java SHA-1 吗?

java - PLAF 更改为 Motif 时出现 NullPointerException

java - 何时、何地以及如何使用队列?

php - 现代 PHP 哈希算法

c - SHA-1哈希错误

python - Python MD5、SHA512 (+salt) 加密的问题