Привет! Пароль шифрую в базу с помощью функции crypt() на php Примерно вот так: Код (Text): $hashed_pass = crypt($pass, $salt); Но при вводе пароля, достаточно набрать 8 первых символов, чтобы тебя пустило на сайт. В чем ошибка? Или, я вроде где то читал, это зашито в сам crypt()?
какой у тебя salt и какой длины результат ? Добавлено спустя 1 минуту 50 секунд: http://docs.php.%6eet/manual/ru/function.crypt.php вот была тема близкая: viewtopic.php?f=13&t=47470&p=377094&hilit=blowfish#p377055
Эм..подсоливание это как бы само собой разумеющийся процесс. Еств подмешиваю С солью-то вкуснее, чем вовсе без нее. Хоть вирпулл и силен, но от словарного перебора только соль помогает.
То, что хэш солится я и так вижу... Я имел ввиду то, что чувак хотел на***ть весь мир, приписав в переменную $pass перед самим паролем что-то очень-очень длинное (возможно в целях доп. безопасности). Но вот функция crypt (я не уверен, конечно, может это только у меня такое было) почему-то режет первый свой аргумент до 72 знаков (ну или байт, хз), если я не ошибаюсь... Т. о. если первым аргументом вставить строку 72 символа и вычислить хэш, а потом дописать эту строку и опять вычислить хэш, то эти хэши будут одинаковы... Вот так вот... Добавлено спустя 8 минут 57 секунд: Хотя не только у меня одного... http://stackoverflow.com/questions/11801169/what-is-tha-max ... t-function
Хэш солится? Зачем солить хэш? И гже ты "и так видишь"? То что крипт хранит соль в хэше не значит, что хэш солится)))))))) Солится пароль, потом хэшируется. Просто для удобства, потом соль с хэшем в одну строку пишутся. Ну это и есть "посолить пароль". Внесение случайной последовательности символов: 1) Ломает словарный перебор; 2) Крайне затрудняет прямой перебор; 3) Радужные таблицы идут лесом; (которых для того же вирпула, вроде и нет в природе) Обрезание входящих строк - ну это уже к документации конерктного алгоритма.
Ну такое, давай не будем вдаваться в вопросы терминологии, все равно понял о чем я. Не понял? ... Кароч, пароль он и в африке пароль, так что солится ли пароль - тоже еще тот вопрос. Сама соль на пароль никак не влияет, а вот на хэш влияет, поэтому я придерживаюсь мнения, что солится хэш. Ноуп... Функция crypt вторым параметром не зря принимает именно $salt (переводим транслейтом "Salt" => "Соль"), так что я бы придержался мнения, что не в $pass нужно писать соль. Можно, конечно, что-то приписать к хэшируемой строке, но тогда может получиться что-то вроде вопроса ТС...
Все смешалось, люди кони... Придерживайся любого мнения, но когда ведешь диалог, придерживайся общепринятой терминологи, будь добр. Солят именно пароль. Солить = добавить соль к данным. Потом от просоленного пароля снимают хэш. Солить хэш = добавить соль к хэшу. Семантика такая семантика. Ептьс))) Ты спросил, солю ли я $pass у вирпула. Я сказал да. Потому что вирпулл НИКАК не связан с функцией crypt Так что я - солю пароль перед хэшированием. Для crypt это делать не обязательно. И, более того, параметр $salt для crypt - не просто строка. Соль тут определяет алгоритм, по которому будет вестись хэширование. n начальных байтов соли - служебные. Указывают не только алгоритм, но и, к примеру, количество проходов, либо позволяют настроить каике-то тонкости конкретного метода хэширования. По сему опять же - курите доки, там все написано.
Поясни пожалуйста... Я тебе аргументировал, почему я сказал именно "Солить хэш" ??? Где я у тебя такое спросил? Я у тебя вообще ничего не спрашивал)))
Солят именно пароль. Солить = добавить соль к данным. Потом от просоленного пароля снимают хэш. Солить хэш = добавить соль к хэшу. Семантика такая семантика. Ты же когда еду солишь, не придерживаешься мнения, что ты посолил свои фекалии, на которые, на уровне химического состава, это тоже, отчасти, влияет? Так и тут. Солишь именно то, на что соль падает. А не то, что потом получается. Добавлено спустя 59 секунд: ок. 1) 2)
Просто как-то на форумах принято, что если пост без обращения, то он адресуется автору предыдущего поста. Если с обращением, то тому, к кому обратились. Даже не принято, а является естественным и логичным положением дел. Эго тут не при чем. А то так можно и через 10 страниц к кому-то обращаться, как бы подразумевая это, но никому об этом не говоря.
Иногда Whirlpool будет излишним. Using a Whirlpool encryption might be overkill—especially since managing a 512-bit string is a little bit ungainly. Главнее всего тут аргумент "СОЛЬ", а если будет соль и никто не будет видеть исходников, то Whirlpool будет лишним. В таком случае можно и обойтись просто sha1 с тем - же 512 битом, хотя и 160ки хватит + соль = счастье.
Путаете соль и секретный ключ. Используйте профессиональную терминологию. Для тех, кто "не осилил" добавили password_hash в 5.5 Понимаете, между просто хеш функцией и функцией хранения пароля есть одна огромная разница - время вычисления. Хеш функции не ставят задачей замедлить вычисление, более того - чем быстрее считается, тем лучше. Для хранения паролей же важно повышать время вычисления. Кроме того, неплохо бы, что бы хеш-алгоритм использовал много памяти и вообще плохо поддавался подсчету с помощью специального железа, и Whirlpool, как алгоритм AES семейства таким не является.
Понимаете, функция хранения пароля - это просто обертка над хэш-функциями, использующая N байт отдельно указанной соли в качестве руководства к действию, как то - выбор алгоритма и "стоимость рассчетов". Где эта самая стоимость указывается в виде количества итераций. Для того же blowfish, к примеру, если не ошибаюсь, в виде степени двойки. Все равно, что сделать, к примеру 1000000 итераций тем же вирпулом. Слово "блочный" сразу делает Whirlpool алгоритмом "AES семейства"? И да, если дам захешированную им строку, найдете коллизию? Ну так, чисто чтобы сферические кони проскакали мимо.
И вы делаете много итераций? Тогда молодец. Но я, почему-то, уверен, что не делаете, а ограничились hash('whirlpool', $string). И bcrypt - не совсем обертка, это самостоятельные алгоритмы, которые за базу берут известные криптографические. Например, Blowfish и crypt_blowfish - разные вещи, первый вообще ни разу не хеш алгоритм. А так да - это удобная обертка для генерации хеша нужной вычислительной сложности с заданным алгоритмом. Так что не знаю, чем он гиморойнее вашей поделки на базе Whirlpool. Во-первых, причем тут коллизии? Во-вторых, он семейства AES - из этого не делается секрета, как и из того, что один из авторов Whirlpool так же участвовал при создании AES. Читайте интернеты, там все написано. Ну и в третьих - я не занимаюсь подбором пароля, так что у меня нет ПО, считающее Whirlpool на GPU.
Функции хранения паролей - это просто хоть какой-то способ привить нормальное хэширование паролей сообществу разработчиков. Определенный процент которых не стыдится до сих пор открытые пароли в куках хранить. А чо, работает же! Потому и попробовали стандартизировать механизм. Так-то и сессии можно свои организовать без проблем. Они простые как два пальца. Но, чтобы люди не стреляли в ногу, их стандартизировали. Но это не значит, что все, кто юзают не стандартные сессии, а свою реализацию, основанную на других подходах - дебилы. Лично для меня crypt не геморроен, просто я сделал свой выбор в пользу вирпула, исходя из определенных причин. Другое дело, что об этот crypt уже столько народу голову порасшибало, что мама дорогая. Ибо надо курить много доки. А на это нет времени, потому что надо кодить!!!111один!!1раз. Как-то так. С новой функцией в 5.5, надеюсь, станет все так же прозрачно как с введением сессий. Ну, более менее.
Угу, классическая отмаза на уровне классического же анекдота - "некогда инструкцию читать, лес валить нужно". Можно один вечер не попить пифка, а повысить свой профессиональный уровень на эту тему и пользоваться дальше всю жизнь. Они или супер-профессионалы, и просчитали каждый подводный камень своей реализации и способны аргументированно со списком "за/против" доказать свое мнение, или, да, эти самые... ну которые просто решили повыпендриваться.
Немного запутался в ответах, но постараюсь описать, солю не пароль, соль указываю вторым параметром к функции crypt(), чтобы она генерировалась не случайно, а задавалась скриптом и хранилась в базе данных. Солить сам пароль в данной ситуации смысла не вижу, факт остается фактом, crypt() у меня принимает только 8 символов первые. Собственно вопрос, у всех так или я туплю?))) Чтобы еще понятней было, сейчас вот так(пример): Код (Text): // рега $pass = 'pass123456'; $salt = 'wRD1dfghTu124Fsdg12dfFf452fggDfgdDfwe'; $hashedpass = crypt($pass, $salt); //вход $pass = $_POST['pass']; $hashedpass = crypt($pass, $salt_from_mysql); if($hashed_pass == $hashed_pass_from_mysql) return true; Так вот true возвратит уже если в $_POST['pass'] будет содержаться 'pass1234'
Эмнямням... А какому из алгоритмов шифрования соответствует ваша соль? Что возвращает crypt? Длина хеша короче 13 символов?