热更新version_generator 生成的MD5为什么不是文件的MD5么?

为什么热更新脚本生成的MD5,不是文件的MD5

https://thlg.nl/p/?p=13df30324c4c2610441e5b3aa33174dd
试试这个md5的库

用你的库获取的还是文件的MD5,和 ccc提供的生成MD5脚本生成的不一样

@蓝色孤舟

var abuf = new ArrayBuffer(3)
var vu8 = new Uint8Array(abuf)
vu8[0] = 0x41; vu8[1] = 0x42; vu8[2] = 0x43
alert(faultylabs.MD5(abuf) == “902FBDD2B1DF0C4F70B4A5D23525E932”)

试试这样可不可以,还有,生成的md5跟网上是否一样
var arrayData = new Uint8Array(data)
MD5._md5(arrayData);

1赞

还是文件本身的MD5,和我用C#写的和网上在线获取的一样,但是和ccc 那个脚本生成的MD5不一样

@蓝色孤舟

你给我的那个js,我不会用,对js不熟悉,我这样导出使用的

脚本里面用的是 Nodejs 提供的 md5 生成,我验证过 mac 系统下没问题,难道是 windows 系统下的 node 有问题?

我的是mac

那就奇怪了,我这边生成出来都是一样的,我是直接跟命令行中 md5 filename 对比的

http://www.cnfree.org/tools/hash.php

和这个在线MD5获取的是一样的么?我C#用.net库获取的和这个网站上是一样的,和楼上提供的js代码获取的也是一样的,但是和你那个脚本生成的不一样

2赞

我在ccc里面用crypto库,获取的是文件的MD5,和你version_generator里面获取的不一样,为什么

1赞

会不会是你的文件编码不是 utf-8?
我会强制用 utf-8 来读取文件内容,然后生成 md5,具体代码看这里

https://github.com/cocos-creator/tutorial-hot-update/blob/master/version_generator.js#L71

也有可能是由于我是读取文件内容来生成 md5 的,而不是直接用文件

反正你写的脚本获取的不是真正文件的MD5

var data = jsb.fileUtils.getDataFromFile(cc.url.raw(’/resources/circle_1.png’));

这个 data 在ccc里面怎么转化成 utf8 文本,

我验证了一下,确实只有一些小的文本文件生成的 md5 是正常的,大一些的文件或者图片文件都不一样。你可以把我的脚本中的 md5 计算方法改掉,我暂时还没办法确定原因和找到解决方法。

也许可以尝试这个 npm module

https://www.npmjs.com/package/md5-file

把 utf8 去掉就正常了,但是我的项目已经上架了:cold_sweat:

在送审好麻烦:sob:

md5 = crypto.createHash(‘md5’).update(fs.readFileSync(subpath)).digest(‘hex’);

改成这样,生成的就是对的了,不知道有没有别的问题

1赞

客户端的Md5值怎么计算,有没有Js版本计算Md5值的,还是需要js-binding

3.16 热更,为什么md5一样的文件也全部下载下来了

@panda 那个这个问题怎么办。是否热更新就做不了了。我把ccc里面的md5算法和node.js md5算法搞成一样的。大文件 比如图片或者MP3一定会不一致。所以问题不是出在md5上。问题可能出在ccc jsb.fileUtils.getDataFromFile 和 node.js fs.readFileSync 在读取大文件的时候 读出来的数据可能不一样。