-1

我正在从 Java 中的给定密码创建哈希并将其存储到 MySQL 数据库中。我已经阅读了很多关于在数据库中存储盐的内容,但有几个原因我选择不在这里。似乎没有办法从黑客那里完全隐藏每个用户特定的随机盐,也没有办法隐藏我有一个托管数据库和可下载软件。因为这个软件只在内部使用,它最多有 20 个用户,Hacker更容易偶然发现数据库端口而不是软件。至少通过在软件中生成盐而不是将其存储在数据库中,他需要找到软件来反编译并确定盐/哈希方法。

这是我正在使用的方法:

public static byte[] getHash(String password) throws NoSuchAlgorithmException {

    MessageDigest digest = MessageDigest.getInstance("SHA-256");

    byte[] passBytes = password.getBytes();

    byte[] salt = digest.digest(passBytes);     

    byte[] digestable = new byte[passBytes.length + salt.length];

    System.arraycopy(passBytes, 0, digestable, 0, passBytes.length);
    System.arraycopy(salt, 0, digestable, passBytes.length, salt.length);

    return digest.digest(digestable);
}

编辑: 把这个放在这里

我看到我需要生成一个随机盐,我现在可以存储它。

4

1 回答 1

1

不,唯一可接受的密码散列方法是 bcrypt、scrypt 和 PBKDF2。

SHA-256 太快了。你想要一个慢速散列方法,就像上面一样。

如果您的主要安全威胁是 SQL 注入,那么您应该使用密码。这意味着 HMAC 使用 Web 服务器知道的密码对密码进行 HMAC 处理,但数据库服务器不知道。请参阅https://blog.mozilla.org/webdev/2012/06/08/lets-talk-about-password-storage

您还应该拒绝用户/密码表访问您的 Web 服务器,并有一个非常简单的存储过程 api 用于身份验证。

于 2015-08-14T18:44:48.040 回答