def cid_hash_file(path):
h = hashlib.sha1()
size = os.path.getsize(path)
with open(path, 'rb') as stream:
if size < 0xF000:
h.update(stream.read())
else:
h.update(stream.read(0x5000))
stream.seek(int(size/3))
h.update(stream.read(0x5000))
stream.seek(size-0x5000)
h.update(stream.read(0x5000))
return h.hexdigest().upper()
上面的代码用 chatGPT 转换后是这样的
function cidHashFile(path) {
const h = crypto.createHash('sha1');
const size = fs.statSync(path).size;
const stream = fs.createReadStream(path);
if (size < 0xF000) {
stream.on('data', (chunk) => {
h.update(chunk);
});
} else {
stream.on('data', (chunk) => {
if (stream.bytesRead <= 0x5000) {
h.update(chunk);
} else if (stream.bytesRead >= Math.floor(size / 3) && stream.bytesRead < Math.floor(size / 3) + 0x5000) {
h.update(chunk);
} else if (stream.bytesRead >= size - 0x5000) {
h.update(chunk);
}
});
}
stream.on('end', () => {
const result = h.digest('hex').toUpperCase();
console.log(result);
});
stream.on('error', (err) => {
console.error('File reading error:', err);
});
}
试了不同文件计算出来的 hash 不一致,有没有大佬知道原因的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.