Краткий ответ
filename
в приведенном ниже коде можно безопасно использовать в качестве имени файла, , но учтите, что во многих операционных системах обычно есть максимальная длина имени файла и пути и filename
будет 128 символов длиной.
По-быстрому Google, кажется, что максимальная длина файла в Linux равна обычно 255 символов байтов , а максимальная длина пути составляет 4096 символов .В Windows может быть ограничение максимальной длины пути 260 символов , поэтому обратите внимание.
import { SHA3 } from 'sha3';
const hash = new SHA3(512);
hash.update('foo');
const filename = hash.digest('hex');
Более длинный ответ
Выход SHA-3 составляет 512 бит.Используя пакет, связанный с вопросом, hash.diget()
(без аргументов) возвращает Buffer
, содержащий 64 элемента * 8 бит на элемент = 512 бит.Если вы вызовете hash.digest('hex')
, он вернет шестнадцатеричную строку, состоящую только из символов 0-9 и af, которые все безопасны в имени файла.См. документацию к дайджесту для других выходных форматов.
Обратите внимание, что sha-3 может использоваться с некоторыми длинами вывода, отличными от 512 (224, 256, 384);объяснение будет тем же, но для другого числа.
Конечно, можно добиться большего успеха (сделать более короткое имя файла), но этого достаточно для моих целей.Кроме того, здесь нет ничего специфичного для sha3;любые двоичные данные могут быть закодированы в виде шестнадцатеричной строки, которая может использоваться в качестве имени файла;просто обратите внимание на длину.