Sobes.tech
Назад к вопросам
Junior — Middle
68

Используете ли вы криптографические методы для хеширования паролей в Java Security?

Ответ от нейросети

sobes.tech AI

В Java Security для хеширования паролей рекомендуется использовать криптографически стойкие алгоритмы с солью и итерациями, например, PBKDF2, bcrypt или scrypt. Простое использование MessageDigest (например, SHA-256) без соли и итераций не обеспечивает достаточную защиту.

Пример использования PBKDF2 с Java стандартными средствами:

import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class PasswordHasher {
    private static final int ITERATIONS = 65536;
    private static final int KEY_LENGTH = 256;

    public static String hashPassword(char[] password, byte[] salt) throws Exception {
        PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH);
        SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        byte[] hash = skf.generateSecret(spec).getEncoded();
        return Base64.getEncoder().encodeToString(hash);
    }

    public static byte[] getSalt() {
        SecureRandom sr = new SecureRandom();
        byte[] salt = new byte[16];
        sr.nextBytes(salt);
        return salt;
    }
}

Таким образом, да — криптографические методы используются, но важно применять их правильно, с солью и достаточным числом итераций.