2013-09-10 7 views
0

Мне было интересно, существует ли способ изменить способ использования моих паролей. Мой друг-кодер не был самым умным, когда он не добавлял соли к хэшу sha512. Так что теперь это очень неуверенно, и я хочу изменить это. Я думал о том, чтобы сделать сложный код для перефразирования, когда кто-то, у кого есть старый хэш-тип, входит в систему, и он установил бы переменную в true после добавления соли. Или я мог бы взять в настоящее время хешированные пароли и как-то сплавить в них соль. Я бы предпочел не сбрасывать свою пользовательскую базу данных, если мне это не нужно. Любая идея поможет. Я также довольно php noob, поэтому, пожалуйста, объясните, включаете ли вы код.База данных пользователей Re-Hash

Это Хэширование с использованием этого метода.

<?php hash('sha512',"passwordhere") ?> 
+2

изменение с каждым новым входом - ваш лучший вариант; или мой предпочтительный вариант, не беспокойтесь :-), подумайте о худшем случае, некоторые из них имеют db, но тогда у вас есть свой сайт, поэтому его игра закончилась. –

ответ

2
  1. Alter таблицу пользователей в столбец 'соль', значение 'NULL' по умолчанию.
  2. Alter код входа, чтобы проверить, если пользователь имеет соль:
    • Если да, сравнить соленых хэшей и войти
    • Если нет:
      1. Сравнить с несоленые хэшей.
      2. Создайте случайные соли.
      3. Создайте свой соленый хеш.
      4. Сохраните новую соль и хэш в базе данных.
      5. Продолжите процесс входа в систему.

Конечно, вам также потребуется обновить код для регистрации, изменения пароля/восстановления и т.д.

В качестве альтернативы, вместо столбца «соли» можно положить в a 'hash_ver' и использовать это, чтобы определить, какой метод проверки использовать и когда обновлять хеш. Таким образом, если вы хотите использовать метод хеширования, в котором содержится соль с хешем, например, bcrypt, вы не застреваете, пытаясь понять, какой тип хэша вы имеете в виду.

+0

Не могли бы вы объяснить hash_ver? – Darkaaja

+0

Я бы использовал беззнаковый tinyint по умолчанию 0 и увеличивал его каждый раз, когда вы меняете схему хэширования. Затем вы можете добавить больше методов хэширования в будущем, и ваши функции аутентификации могут быть осведомлены о том, какой хэш они ищут, и нужно ли изменять хэш при входе пользователя в систему. 0 = SHA512, 1 = SaltedSHA512, 2 = bcrypt, 3 = все, что заменяет bcrypt и т. Д. – Sammitch

0
$old_hash = hash('sha512',"passwordhere"); 
$salt = ''; // Generate salt here 
$new_hash = hash('sha512', $old_hash.$salt) ; 
1

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

Примечание: Быстрые алгоритмы хеширования, такие как SHA- *, не подходят для хеш-паролей, а вместо этого переключаются непосредственно на функцию медленного ввода ключей, такую ​​как BCrypt. Новая функция PHP password_hash() упростит хэширование (она создаст для вас безопасную соль), и это «будущее доказательство», и это сделает возможным переход в будущем.

Смежные вопросы