【问题标题】:match MD5 raw output between Javascript and PHP [duplicate]在 Javascript 和 PHP 之间匹配 MD5 原始输出 [重复]
【发布时间】:2019-11-26 05:28:36
【问题描述】:

我正在尝试找到一个 md5-js 库,它将返回与 PHP 的 md5 函数等效的原始哈希输出。我在这里尝试做的是:

在 PHP 中:

echo base64_encode(md5('city', true)); // returns TtXS6u0aH63MQa0dWO1gPg==
// here setting the second parameter as true means md5 will return the raw out which is something like N������A�X�`>

在 javascript 中,我使用了两个 npm 包。一个用于 md5,另一个用于 Base64 编码。以下是库:

  1. https://www.npmjs.com/package/blueimp-md5
  2. https://www.npmjs.com/package/js-base64n

JS代码行如下:

console.log('city: ', Base64.encode(md5('city', null, true))) // returns TsOVw5LDqsOtGh/CrcOMQcKtHVjDrWA+ 

为什么两个结果不相同?我正在尝试在 Javascript 中找到一个解决方案,它将返回与 php 相同的结果。

【问题讨论】:

  • identical md5 for JS and PHP: "The important detail here is the character encoding. MD5, like all hashes, works on the binary, which differs between the different encodings"的可能重复

标签: javascript php base64 md5


【解决方案1】:

在 PHP 中: 1. 在 PHP 中,我们使用 MIME base64 编码数据。 2. MIME(多用途互联网邮件扩展)base64 用于将字符串编码为base64。 3. base64_encoded 数据比原始数据多占用 33% 的空间。

在 JavaScript 中: 1. Base64 是一组类似的二进制到文本的编码方案,通过将其转换为 radix-64 表示形式,以 ASCII 字符串格式表示二进制数据。 2. 每个 Base64 位正好代表 6 位数据,这意味着 3 个字节因此可以用 4 个 6 位 Base64 位来表示 3. 我们可以使用 btoa() 和 atob()

【讨论】:

  • 你能澄清一下吗?
猜你喜欢
  • 2018-03-03
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多