Вы можете map
использовать функцию int
для каждой подстроки или использовать понимание списка :
>>> file = '8743-12083-15'
>>> list(map(int, file.split('-')))
[8743, 12083, 15]
>>> [int(d) for d in file.split('-')]
[8743, 12083, 15]
В приведенном выше вызове list
не требуется, если только вы не работаете с Python 3.x. (В Python 2.x map
возвращает список, в Python 3.x он возвращает генератор.)
Также возможно непосредственное присвоение трем переменным (в этом случае выражение генератора вместо составления списка сделаю):
>>> xval, yval, zval = (int(d) for d in file.split('-'))
>>> xval, yval, zval
(8743, 12083, 15)
Ваши пользователи будут в большей безопасности, если вы будете использовать параметризованные запросы вместо конкатенации операторов SQL. И соль должна быть уникальной для каждого пользователя и должна храниться вместе с хешем пароля.
использование:
url in q.queue
который возвращает True, если URL-адрес
находится в очереди
Я рекомендую простой простой класс, который надежно реализует этот шаблон:
Netsilik / PepperedPasswords
( github ).
Он поставляется с лицензией MIT, поэтому вы можете использовать его, как хотите, даже в частных проектах.
Пример кода с использованием Netsilik / PepperedPasswords
:
<?php
use Netsilik/Lib/PepperedPasswords;
// Some long, random, binary string, encoded as hexadecimal; stored in your configuration (NOT in your Database, as that would defeat the entire purpose of the pepper).
$config['pepper'] = hex2bin('012345679ABCDEF012345679ABCDEF012345679ABCDEF012345679ABCDEF');
$hasher = new PepperedPasswords($config['pepper']);
// $hash is what you would store in your database
$hash = $hasher->hash($_POST['password']);
// $hash would be the $hash (above) stored in your database for this user
$checked = $hasher->verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
Обратите внимание : вам это больше не нужно! Это здесь только для исторических целей.
Взгляните на: Портативный фреймворк для хеширования паролей PHP : phpass и убедитесь, что вы используете алгоритм CRYPT_BLOWFISH
, если все возможно.
Пример кода с использованием phpass (v0.2):
<?php
require('PasswordHash.php');
$pwdHasher = new PasswordHash(8, FALSE);
// $hash is what you would store in your database
$hash = $pwdHasher->HashPassword( $password );
// $hash would be the $hash (above) stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
PHPass был реализован в некоторых довольно известных проектах:
Хорошо, что вам не нужно беспокоиться о деталях, эти детали были запрограммированы людьми с опытом и проверены многими людьми в Интернете.
Для получения дополнительной информации о схемах хранения паролей прочтите сообщение в блоге Джеффа : Вы, вероятно, храните Неправильный пароль
Что бы вы ни делали, если выберете подход « Я сделаю это сам, спасибо », не используйте MD5
или SHA1
больше . Это хороший алгоритм хеширования, но считается неработающим в целях безопасности .
В настоящее время использование crypt с CRYPT_BLOWFISH является наилучшей практикой.
повторное Возможно неправильное хранение паролей
Что бы вы ни делали, если вы выберете подход « Я сделаю это сам, спасибо », не используйте MD5
или SHA1
больше . Это хороший алгоритм хеширования, но считается неработающим в целях безопасности .
В настоящее время использование crypt с CRYPT_BLOWFISH является наилучшей практикой.
re Возможно неправильное хранение паролей
Что бы вы ни делали, если вы выберете подход « Я сделаю это сам, спасибо », не используйте MD5
или SHA1
больше . Это хороший алгоритм хеширования, но считается неработающим в целях безопасности .
В настоящее время использование crypt с CRYPT_BLOWFISH является наилучшей практикой.
CRYPT_BLOWFISH в PHP - это реализация хэша Bcrypt. Bcrypt основан на блочном шифре Blowfish, в котором для замедления алгоритма используется дорогостоящая настройка ключей.
Меня устраивает. Г-н Этвуд писал о силе MD5 против радужных таблиц , и в основном с такой длинной солью вы сидите красиво (хотя некоторые случайные знаки препинания / числа, это могло бы улучшить его).
Вы могли бы это улучшить. также посмотрите на SHA-1, который, кажется, становится все более популярным в наши дни.
Лучше, чтобы каждый пользователь имел уникальную соль.
Преимущество использования соли состоит в том, что злоумышленнику становится труднее предварительно сгенерировать сигнатуру MD5 для каждое словарное слово. Но если злоумышленник узнает, что у вас есть фиксированная соль, он может предварительно сгенерировать подпись MD5 для каждого словарного слова с префиксом фиксированной соли.
Лучше каждый раз, когда пользователь меняет свой пароль, ваша система генерирует случайная соль и сохраните эту соль вместе с записью пользователя. Это немного удорожает проверку пароля (поскольку вам нужно найти соль, прежде чем вы сможете сгенерировать подпись MD5), но это значительно усложняет злоумышленнику предварительную генерацию MD5.