Почему этот код сначала кодирует случайную соль в виде шестнадцатеричных цифр?

Я смотрю на некоторый существующий код, который генерирует соль, которая используется в качестве ввода в хэш аутентификации.

Соль имеет длину 16 байтов и генерируется сначала с помощью генератора случайных чисел ОС, чтобы получить 8 байтов случайных данных.

Затем каждый байт в 8-байтовом буфере используется для помещения данных в 2 байта 16-байтового буфера следующим образом:

out[j]   = hexTable[data[i] & 0xF];
out[j-1] = hexTable[data[i] >> 4 & 0xF];

куда out это 16-байтовая соль, data является начальным 8-байтовым буфером, j а также i просто инкрементаторы цикла, и hexTable это просто массив шестнадцатеричных цифр т.е. 0 в F,

Почему все это делается? Почему 16-байтовая соль просто не заполняется случайными данными для начала? Зачем проходить этот сложный процесс?

Является ли то, что делается здесь, стандартным способом получения солей? Какая польза и смысл в этом по сравнению с генерацией 16 случайных байтов?

1 ответ

Решение

Это просто преобразование ваших 8 случайных байтов в 16 шестнадцатеричных цифр.

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

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

Другие вопросы по тегам