php - 使用 javascript 和 PHP 生成相同的 MD5

标签 php javascript md5 filereader

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

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

服务器端,我会使用 PHP 的 fopen 命令和 md5 函数。

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

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

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

有什么建议吗?

编辑 1:

我遵循了optima1给出的思路。获取每个字符并在 javascript 和 PHP 上打印 unicode 编号。在所有情况下(使用 vimdiff),我最后只能看到一个区别。

PHP: 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 字符串的末尾添加一个零...

编辑 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 获得这些函数......

关于php - 使用 javascript 和 PHP 生成相同的 MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17283581/

相关文章:

php - 加速实时搜索 js, php, mysql

javascript - 无法使用 multer 更改上传文件的名称

javascript - 使用 JavaScript(不是 JQuery!)淡化图像

bash - 如何只检测我的 bash shell 脚本中的不同文件?

php - 在数据库单元格中查找关键字以从 'quotes' 中提取信息,并保持换行符以放入单独的 <li> 标记中

php - Composer 自动加载文件调试

PHP 与 NetBeans : Applying new PhpDoc without the actual declaration

javascript - 在reactjs中获取api时出错

php - 登录时salt和md5加密的问题

hash - 需要更快的 Linux 指纹/哈希比较的建议