Как мне хранить мои 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

Ответы

Ответ 1

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

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

Ответ 2

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

SHA512 создаст строку 128 char, поэтому дайте поле, по крайней мере, этому.

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

Ответ 3

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

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

Будет ли ваш VARCHAR(128) готов к INSERT/UPDATE.