Хеши 64-битных паролей в таблицах MySQL - PullRequest
3 голосов
/ 24 октября 2011

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

// RETURNS: rAyZOnlNBxO2WA53z2rAtFlhdS+M7kec9hskSCpeL6j+WwcuUvfFbpFJUtHvv7ji   
base64_encode(hash_hmac('sha384', $str . SC_NONCE, SC_SITEKEY, true));

И я храню хэши в поле char (64) (MySQL -InnoDB).

СледуетЯ использую varchar (64) вместо char (64) ?Почему?

Редактировать: Я изменил sha256 с sha384 .Потому что в этом примере sha256 всегда возвращает мне 44 байта.Извините за путаницу.Теперь это 64 байта.

Ответы [ 4 ]

5 голосов
/ 24 октября 2011

Вы должны использовать CHAR (64), поскольку ваш хеш имеет фиксированную длину.Использование VARCHAR добавит еще один байт, тратя впустую пространство.

5 голосов
/ 24 октября 2011

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

Если у вас есть данные переменной длины для хранения, тогда varchar сохранит ненужное пространство.

3 голосов
/ 24 октября 2011

Один из альтернативных способов сделать это (если вы действительно заботитесь о пространстве) - это сохранить хэш в двоичной форме. Некоторые подробности о том, как это сделать, можно найти здесь ; вам, вероятно, понадобится BINARY (32) для хэша SHA-256.

2 голосов
/ 24 октября 2011

Даже если вы используете строку в кодировке Base 64, результат не обязательно будет иметь длину 64 бита.В этом случае VARCHAR лучше, потому что результат может быть короче, чем 64 бита.

На самом деле, как видно здесь , 64 бита - это максимальная длина, а не установленная длина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...