Сегодня я дважды переделал свой монетоприемник Ката, используя только команды 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()); }
Я передал строку в этот метод и хэшировал строку с добавленной к ней солью. Я добавил соль для безопасности, так как вы можете изменить большинство хэшей, и добавление соли должно рандомизировать хэш каждый раз, если вы делаете это правильно. Вам также потребуется сохранить соль с хешированным паролем для аутентификации в более позднее время.