What is SALT and how do i use it?

Решение для SQLite3 :

SELECT
    *, 
    strftime('%j', birthday) - strftime('%j', 'now') AS days_remaining
FROM
    person
WHERE :n_days >= CASE
    WHEN days_remaining >= 0 THEN days_remaining
    ELSE days_remaining + strftime('%j', strftime('%Y-12-31', 'now'))
    END
;

Решения, деленные на 325,25 для получения возраста, или переноса даты рождения на текущий год и т. Д., Не сработали для меня. Это вычисляет дельту двух дней года (1-366). Если день рождения еще не наступил в этом году, вы автоматически получите правильное количество оставшихся дней, которое вы можете сравнить. Если день рождения уже наступил, оставшиеся дни будут отрицательными, и вы можете получить правильное количество оставшихся дней, добавив общее количество дней в текущем году. Это также правильно обрабатывает високосные годы, так как в этом случае также будет добавлен дополнительный день (с помощью dayOfYear (31 декабря.))

42
задан jwir3 31 December 2014 в 04:37
поделиться

5 ответов

Я определенно не эксперт, но очень короткий ответ заключается в том, что «засоление» строки текста означает наклеивание нескольких дополнительных символов в конце. Вы можете посолить "соль" с "abcdefg", чтобы получить "saltabcdefg". Это может быть полезно, если «соль» - это пароль, который вы хотите сделать более сложным для угадывания.

Как правило, пароль + соль преобразуются («хэшируются») в результате некоторого труднообращаемого процесса в совершенно другую строку. Эта преобразованная строка затем сохраняется как пароль вместе с открытым текстом соли, и исходный простой текст самого пароля отбрасывается. Когда вы хотите проверить, что кто-то ввел правильный пароль, вы объединяете все, что они ввели, с солью, указанной в файле паролей, и затем хешируете результат. Если результат соответствует хэшу пароля, который у вас есть в записи, то вы знаете, что он ввел правильный пароль.

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

Для PHP вы можете посмотреть, как некоторые фреймворки реализовали это. Две быстрые ссылки для CakePHP и Zend соответственно:

http://www.jotlab.com/2010/04/18/cakephp-rainbow-table-protection-behaviour/

http://www.zimuel.it/blog/2009/07/build-a-secure-login-with-zend-framework/

43
ответ дан 26 November 2019 в 23:42
поделиться

Когда я впервые задал этот вопрос, много лет назад, меня спросили: «Что соль делает для еды?» Ответ в том, что это добавляет разнообразия в еду. Идея, лежащая в основе криптографической соли, заключается в том, что это то, что вы добавляете в конец или начало строки, чтобы два идентичных пароля не хэшировали одно и то же криптографическое значение.

Подумайте об этом - если бы у меня был действительно распространенный пароль, такой как «hello123», а затем он хэшировался с тем же криптографическим хешем, что и все другие пароли «hello123», я не мог бы просто посмотреть в список хешированных паролей, чтобы узнать, кто еще имел такой же криптографический хеш, и использовать мой пароль в своей учетной записи?

25
ответ дан 26 November 2019 в 23:42
поделиться

Соль - это (короткая) строка, которая добавляется к строке, которую вы хотите зашифровать или хешировать. Пример:

<?php
 $password = 'abcdefg';
 $salt = 'anythingyouwant_';
 $pw_hash = md5($salt.$password);
?>

Это добавляет безопасность хешу, так как маловероятно, что "anyyouwant_abcdefg" уже хранится в базе данных хеша ( http://en.wikipedia.org/wiki/ Rainbow_tables )

6
ответ дан 26 November 2019 в 23:42
поделиться

По какой-то причине. Соли, как правило, трудно понять начинающим криптографам. Как только это щелкает, хотя, понятие чрезвычайно просто. Посмотрите на эту статью. Я думаю, это объясняет концепцию лучше, чем большинство.

http://cryptodox.com/Salt_%28cryptography%29

0
ответ дан 26 November 2019 в 23:42
поделиться

Давайте немного оживим ситуацию, объединив несколько алгоритмов хеширования и сделав алгоритм двойного хеширования:

$password = "myPassword";
$salt = sha1(md5($password)).'k32duem01vZsQ2lB8g0s'; 
$password = md5($password.$salt);

Как видите, сначала мы хэшировали пароль с помощью алгоритма двойного хеширования (md5 и sha1 ) и конкатенация с ключом создает солт-значение. После этого мы скомбинировали реальный пароль с сгенерированным значением соли и снова хэшировали его с помощью md5. Преимущество состоит в том, что таким образом alt value является случайным, и оно изменяется, делая практически невозможным его изменение. Я имею в виду, если вы можете подождать миллион лет и иметь суперкомпьютер в своих руках, попробуйте сломать его.

0
ответ дан 26 November 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: