Почему этот код сначала кодирует случайную соль в виде шестнадцатеричных цифр?
Я смотрю на некоторый существующий код, который генерирует соль, которая используется в качестве ввода в хэш аутентификации.
Соль имеет длину 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 шестнадцатеричных цифр.
Кажется, что кто-то неправильно понял концепцию соли или того, что вводит ваш хэш-запрос, и подумал, что он принимает только шестнадцатеричные цифры.
Возможно, соль также хранится где-то, где проще хранить шестнадцатеричные цифры вместо чистых байтов, и программист подумал, что было бы хорошо иметь возможность повторно использовать сохраненную соль как есть (то есть без предварительного преобразования ее обратно в байты).