使用 javascript 和 PHP 生成相同的 MD5

2023-12-02

我正在尝试构建一个需要比较任何文件的 MD5 哈希值的应用程序。 由于具体问题,上传前,客户端必须生成MD5,上传后应用程序需要在服务器端检查MD5。

我的第一个方法是在客户端使用 JavaScript File API 和FileReader.ReadAs功能。然后我使用这里找到的 MD5 算法:http://pajhome.org.uk/crypt/md5/

服务器端,我会使用 PHPfopen命令和md5功能。

当使用简单的文本文件时,这种方法效果很好。但是,当使用二进制文件(如某些 jpg 或 pdf)时,客户端生成的 MD5 与服务器不同。使用md5sum命令行工具我发现服务器MD5是正确的,问题出现在客户端。

我尝试过其他 MD5 API,发现了相同的结果。我怀疑FileReader.ReadAs函数加载文件内容略有不同(我已经尝试了所有ReadAs函数变体:文本、二进制等),但我不知道有什么区别。

我丢失了一些东西,但不知道是什么,也许我需要在生成 MD5 之前以某种方式解码内容。

有小费吗?

Edit 1:

我遵循optima1给出的想法。获取每个字符并在 JavaScript 和 PHP 上打印 unicode 编号。在所有情况下,我最后只能看到一个差异(使用 vimdiff)。

菲律宾比索:54 51 10 37 37 69 79 70 0

JavaScript:54 51 10 37 37 69 79 70

也许 PHP 中的这个额外的零是某种“字符串结束”。在这两种情况下,二进制字符串具有相同的长度。在 JS 内容末尾添加 String.fromCharCode(0) 并不能解决问题。我会继续调查。

如果我找不到解决方案,我将尝试通过连接这些字符代码并使用它来构建 MD5 来构建一个巨大的字符串。这是一个糟糕的解决方案,但现在可以使用,我只需要在 JS 字符串末尾添加一个零......

Edit 2:

感谢上帝!这个实现就像一个魅力:http://www.myersdaily.org/joseph/javascript/md5.js

如果您需要从二进制文件生成 MD5 哈希值,那就去做吧。

提前致谢!


http://membres-liglab.imag.fr/donsez/cours/exemplescourstechnoweb/js_securehash/

javascript md5 和 php md5 都是相同的,但是我们需要使用一些函数...我们可以从上面的 url 获取这些函数...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 javascript 和 PHP 生成相同的 MD5 的相关文章

随机推荐