Я пытаюсь реплицировать хеширование файла MobileSheetsPro, приложения Android, в котором есть hashcodes.txt, который содержит ha sh для каждого файла, а также путь, дату последнего изменения и размер файла. Мы просто сосредоточимся на хэшировании.
Итак, для случайной песни, которую я загрузил здесь , если вы хотите попробовать ее самостоятельно, я использую пакет murmurhash-native
npm преобразовать его в буфер, а затем иметь sh, например, так:
const fs = require("fs");
const { promisify } = require("util");
const { murmurHash } = require("murmurhash-native");
const readFileAsync = promisify(fs.readFile);
async function hashcodeObjFromFilePath(filepath) {
const buf = await readFileAsync(filepath);
const h = murmurHash(buf);
console.log(h);
}
Это выдает ха sh из 4275668817
при использовании начального числа 0 и 3020822739
при использовании семя 0xc58f1a7b
в качестве второго аргумента.
Проблема: приложение, кажется, вычисляет его по-другому. Разработчик написал следующее, но я не вижу точной функции в коде, который он связал:
Проверьте это: ссылка на github
Это классы, которые я использовал. Я звоню Hashing.goodFast32Ha sh (HASH_KEY)) где HASH_KEY равен 0xC58F1A7B.
EDIT Я получил больше информации от разработчика:
Я звоню в Files.ha sh (file, Hashing.goodFast32Ha sh (HASH_KEY)); Используя возвращаемое значение, я вызываю asInt () для возвращаемого объекта HashCode. Так что это целочисленное значение со знаком (отрицательные значения просто в порядке). И да, HASH_KEY - это начальное значение, передаваемое функции.
Поскольку я не очень хорош в Java, я до сих пор не знаю, повторить это в node-js ...
Это все, что у меня есть, ребята. Кто-нибудь видит, где я иду не так?