Использую ли я PHP? s crypt () работает правильно?

Используйте регулярное выражение, чтобы удалить все слова, которые не совпадают:

import re
pattern = re.compile(r'\b(' + r'|'.join(stopwords.words('english')) + r')\b\s*')
text = pattern.sub('', text)

Это, вероятно, будет намного быстрее , чем зацикливание, особенно для больших строк ввода.

Если последнее слово в тексте будет удалено из-за этого, у вас может быть завершающий пробел. Я предлагаю разобраться с этим отдельно.

17
задан Kev 29 September 2010 в 11:10
поделиться

5 ответов

Вам действительно стоит взглянуть на PHPASS: http://www.openwall.com/phpass/ Это фреймворк для хеширования паролей с использованием crypt (), который используется в таких проектах, как Wordpress и phpBB.

На этом сайте также есть отличная статья о хешировании, посоле и растяжении пароля с использованием crypt (): http://www.openwall.com/articles/PHP-Users-Passwords

ОБНОВЛЕНИЕ: В настоящее время есть альтернатива для библиотеки PHPASS. В следующей версии PHP есть специальные функции для хеширования и проверки паролей (с использованием bcrypt): http://www.php.net/manual/en/ref.password.php . Существует библиотека совместимости, которая реализует эти функции для PHP 5.3.7+: https://github.com/ircmaxell/password_compat

15
ответ дан 30 November 2019 в 12:26
поделиться

Вы хорошо используете crypt(). crypt($input, $stored) == $stored - это способ его использования.

Ваша функция get_salt() невелика, поскольку она использует часто плохую функцию rand(). Вам следует рассмотреть возможность использования более сильной случайной функции, например, openssl_random_pseudo_bytes().

11
ответ дан 30 November 2019 в 12:26
поделиться

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

Е.Г.

PASSWORD HASH
iloveSO  gjroewjgo
password knbnogjwm
secret   gjroehghe
jbieber  rewgroewj

и т. Д.

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

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

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

3
ответ дан 30 November 2019 в 12:26
поделиться

Это неправильное использование crypt (), потому что вы используете устаревший примитив. Blowfish очень старый, twofish является заменой, и даже он старый, потому что Threefish почти завершена. Вы должны использовать члена семейства sha2, оба sha256 или sha512 - хороший выбор. crypt () может использоваться с sha256 или sha512, вы должны использовать параметры CRYPT_SHA256 CRYPT_SHA512 соответственно.

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

2
ответ дан 30 November 2019 в 12:26
поделиться

Используйте SHA-512 (если доступно) с солью, которая включает time () и openssl_random_pseudo_bytes (). Crypt консолидирован / эффективен, потому что возвращает соль, вставленную с хешированной строкой.

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

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