Сегодня я дважды переделал свой монетоприемник Ката, используя только команды vim. Значительно сократить время и определенно привыкнуть к использованию vim. Кроме того, сегодня я провел некоторое время, работая над мини-проектом Java, где он будет хешировать и солить строку. Вот git.

Я сделал это, создав 4 метода: один для соления, один для хеширования, один для выбора случайного числа и, наконец, один для хеширования и соления строки. Хеш-функция выглядела так:

public static String hash(String pw) {
    MessageDigest m = null;
    String hashtext = null;
    try {
        m = MessageDigest.getInstance("MD5");
        m.reset();
        m.update(pw.getBytes());
        BigInteger bigInt = new BigInteger(1, m.digest());
        hashtext = bigInt.toString(16);

        while (hashtext.length() < 32) {
            hashtext = "0" + hashtext;
        }

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    return hashtext;
}

Он работает с использованием встроенной в Java системы дайджеста сообщений, где вы можете выбрать различные типы хеширования, например, MD5, SHA1, SHA256 и т. д. Я выбрал MD5 без особых причин.

Как я создал случайную соль:

public static int randomPick(String[] characters) {
    Random rand = new Random();
    return rand.nextInt(characters.length);
}
public static String salt() {
    String[] characters = {"dj3", "jeii2", "2374", "xn32974", "3883", "duui3", "ccc", "lkoi", "2923", "mcnwiud", "1sd1f"};
    String saltedText = "";
    for (int i = 0; i < 10; i++) {
        int index = randomPick(characters);
        saltedText += characters[index];
    }
    saltedText += "salted";
    return saltedText;
}

Я создал массив случайных символов, просмотрел его и случайным образом выбрал из него с помощью метода randomPick, а затем присоединил их всех к переменной saltedText.

Ну наконец то:

public static String enteredPassword(String pw) {
    return hash(pw + salt());
}

Я передал строку в этот метод и хэшировал строку с добавленной к ней солью. Я добавил соль для безопасности, так как вы можете изменить большинство хэшей, и добавление соли должно рандомизировать хэш каждый раз, если вы делаете это правильно. Вам также потребуется сохранить соль с хешированным паролем для аутентификации в более позднее время.