Мне было любопытно почему это не сработало. Сначала давайте объясним, что на самом деле происходит. Вы не включаете тип кодировки файла, когда звоните readFile
. По readFile
документы :
Если кодировка не указана, возвращается необработанный буфер.
Это нормально. Вы могли бы подумать, что буфер файла будет таким же хешируемым, как и фактические данные в файле. Однако происходит то, что крипто-библиотека не учитывает получение буфера, или, скорее, она учитывает только строки. Вы можете видеть это в источнике библиотеки здесь: core. js: 512 , где она делает typeof data === 'string'
проверку.
Так как typeof a_buffer === "string"
оценивается в false
, ха sh никогда не обновляется. Из-за этого вы получаете один и тот же га sh каждый раз.
Итак, решение состоит в том, чтобы просто предоставить кодировку:
fs.readFile('./file.txt', "utf8", function(err,data){...}
или выполнить какую-либо операцию, чтобы включить буфер в строку таким образом, что вы получите фактические данные, такие как data.toString("utf8")
, где data
- это буфер из readFile
.