我试图复制安卓应用MobileSheetsPro的文件散列,其中有一个hashcodes.txt,其中包含每个文件的散列,以及路径、最后修改的日期和文件大小。我们就把注意力集中在哈希部分。
因此,对于我上传的随机歌曲这里,如果您想自己尝试,我将使用murmurhash-native npm包将其转换为缓冲区,然后按如下方式散列:
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);
}当使用默认种子0和使用种子4275668817作为第二个参数时,输出3020822739的哈希值。
问题是:这个应用程序的计算方法似乎不同。开发人员编写了以下代码,但我在他所链接的代码中没有看到确切的函数:
看看这个:github链接 这些是我用过的课程。我称之为Hashing.goodFast32Hash( HASH_KEY ),其中HASH_KEY等于0xC58F1A7B。
编辑我从dev获得了更多的信息:
我调用Files.hash(file,Hashing.goodFast32Hash(HASH_KEY));使用返回值,在返回的HashCode对象上调用"asInt()“。所以它是一个有符号的整数值(负值很好)。是的,HASH_KEY是传递给函数的种子值。
因为我不擅长Java,所以我仍然不知道在节点js中复制.
伙计们,这就是我的全部信息。有人看到我哪里出错了吗?
发布于 2020-03-07 19:01:04
找到了!Java中的asInt()函数以小字节顺序返回一个有符号的int32 *
以下可能不是最简单的方法,但代码
const h = murmurHash(buf, "buffer", 0xc58f1a7b);
// console.log(parseInt(h, 16).toString(2));
const fromHashFile = Buffer.alloc(4);
fromHashFile.writeInt32BE(-1274144557);
console.log(fromHashFile);
console.log(h);
console.log(h.readInt32BE());
console.log("hash from hashcodes file: -1274144557");输出以下内容到控制台:
<Buffer b4 0e 18 d3>
<Buffer b4 0e 18 d3>
-1274144557
hash from hashcodes file: -1274144557https://stackoverflow.com/questions/60547276
复制相似问题