Длина соли Blowfish для функции Crypt ()?

Согласно документации crypt () , соль должна состоять из 22 цифр по основанию 64 из алфавит "./0-9A-Za-z".

Это пример кода, который они приводят:

crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');

Первая запутывающая часть состоит в том, что соль имеет 25 символов, а не 22.

Вопрос № 1: Означает ли это, что соль должна быть длиннее , чем 22 символа?

Затем я сам протестировал функцию и кое-что заметил. Если я использую 20-символьную соль, я получаю это

// using 20 char salt: 00000000001111111111
crypt('rasmuslerdorf', '$2a$07$00000000001111111111$');
// $2a$07$00000000001111111111$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2

Итак, когда я использовал 20-символьную соль, на выходе вся соль. Это удобно, потому что мне тогда не нужно хранить соль в отдельном месте. (Я хочу использовать случайные соли). Я смог бы прочитать соль из сгенерированного хэша.

Однако, если я использую 22-символьную соль, как указано в документации, или более длинную, соль будет отключена в конце.

// using 22 char salt: 0000000000111111111122
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// 22nd character of the salt is gone

// using 25 char salt: 0000000000111111111122222
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122222$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before, 21 chars of the salt are in the hash

Вопрос # 2: Итак, какова правильная длина соли? 20? 22? Дольше?

Вопрос № 3: Кроме того, Хорошая идея - вычитать соль из хеша, когда пора проверять пароли? Вместо того, чтобы хранить соль в отдельном поле и читать ее оттуда. (Что кажется излишним, поскольку соль, кажется, включена в хеш).

10
задан Burak Guzel 13 January 2011 в 17:52
поделиться