@Burak Guzel: CRYPT_SALT_LENGTH возвращает 60 до PHP 5.3.1, но 123 из 5.3.2. Это связано с тем, что SHA-256 (соль длиной 64 символа) и SHA-512 (соль длиной 123 символа) были введены в PHP 5.3.2.

сно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

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

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

// using 22 char salt: 0000000000111111111122
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122

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

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

);

Первая сбивающая с толку часть состоит в том, что соль имеет 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? Longer?

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

); // $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? Longer?

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

);

Первая сбивающая с толку часть состоит в том, что соль имеет 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? Longer?

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

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

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

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

);

Первая сбивающая с толку часть состоит в том, что соль имеет 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? Longer?

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

); // $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? Longer?

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

);

Первая сбивающая с толку часть состоит в том, что соль имеет 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? Longer?

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

); // $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui // Same hash was generated as before, 21 chars of the salt are in the hash

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

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

);

Первая сбивающая с толку часть состоит в том, что соль имеет 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? Longer?

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

); // $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? Longer?

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

);

Первая сбивающая с толку часть состоит в том, что соль имеет 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? Longer?

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

Ответы на вопрос(1)

Решение Вопроса

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

Относительно вашего третьего вопроса: да, вы должны прочитать и проверить хеш, используя встроенные параметры соли (и стоимости) из самого хеша.

 Sliq11 сент. 2012 г., 22:46
@Burak Guzel: CRYPT_SALT_LENGTH возвращает 60 до PHP 5.3.1, но 123 из 5.3.2. Это связано с тем, что SHA-256 (соль длиной 64 символа) и SHA-512 (соль длиной 123 символа) были введены в PHP 5.3.2.
 Burak Guzel13 янв. 2011 г., 19:52
CRYPT_SALT_LENGTH возвращает 60 на моей машине с Win7, 123 на Ubuntu.
 Alix Axel14 янв. 2011 г., 12:32
@ Бурак Гузель: согласно инструкцииPHP устанавливает константу с именемCRYPT_SALT_LENGTH которая указывает самую длинную действительную соль, разрешенную доступными хэш.

Ваш ответ на вопрос