Как мне хранить мои saS122 соленые и хешированные пароли в MySQL?

Все,

Я использую следующую функцию PHP для слияния и хэш-паролей пользователей для веб-приложения:

function stringHashing($password,$salt){ $hashedString=$password.$salt; for ($i=0; $i<50; $i++){ $hashedString=hash('sha512',$password.$hashedString.$salt); } return $hashedString; } 

Каков наилучший способ хранения результирующей строки в MySQL? Я полагаю, это фиксированное поле CHAR? Как мне рассчитать правильную длину?

Благодаря,

JDelage

Ну, SHA512 всегда вернет 512-битный хеш, метод с двумя аргументами hash() возвращает это как шестнадцатеричные цифры, так что это 512 бит / 8 бит на байт * 2 шестнадцатеричных цифры на байт = 128 шестнадцатеричных цифр

CHAR(128) должен быть тем, что вам нужно

Я всегда использовал поле varchar с более чем необходимой длиной. Что, если, по дороге, вы хотите изменить свой алгоритм? Вы должны изменить таблицу, которая раздражает.

SHA512 будет генерировать 128-символьную строку, поэтому дайте поле, по крайней мере, этому.

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

Если кто-то знает вашу соль, у них, вероятно, есть исходный код, который поможет им повторить его 50 раз. В этом свете, учитывая тривиальное преимущество безопасности для рекурсивного повторного хэширования с фиксированным счетом, я думал, что предлагаю использовать SHA2 () из MySQL 5.5.5+ в качестве более простой альтернативы:

 mysql_query("SELECT SHA2(CONCAT('$password','$salt'), 512) AS `hash`;"); 

Каким будет ваш VARCHAR(128) готовый к INSERT / UPDATE .