【问题标题】:hash in JS == hash in PHPJS 中的哈希 == PHP 中的哈希
【发布时间】:2011-10-22 21:55:53
【问题描述】:

我需要用 JS 和 PHP 做一个散列,但我需要它们都成为相同的散列。 我只是想知道最好的主意是什么。它需要安全,但它不会散列敏感数据,因此不需要大量的安全措施。

谁能给我一些例子

谢谢。

【问题讨论】:

  • 我很困惑。您是在谈论像 SHA / MD5 这样的加密哈希/摘要还是哈希图结构?
  • 你在同一个问题中提到了散列和加密,它们是完全不同的东西,你想做什么?
  • @Phil 更多地考虑 SHA / MD5
  • @Elgoog 谢谢,是“价值和关键”参考让我感到震惊
  • 如果您使用 MD5,个人经验中的一个 重要 警告词:JavaScript 始终是 UTF8,而 PHP 不是。因此,如果您处理的是 UTF8 字符,对于 看似 的相同输入,您可能会得到不同的结果。

标签: php javascript hash


【解决方案1】:

您可以使用 MD5:给定相同的字符串输入,php 和 JS 解决方案应该是相同的。 http://pajhome.org.uk/crypt/md5/ 有一个 javascript 中的哈希实现列表,并且 md5 的 PHP 实现记录在 here 中,并且都有示例。

您需要注意对两个函数使用完全相同的输入,否则不会太痛苦。

【讨论】:

    【解决方案2】:

    别忘了 javascript 本质上是不安全的,因为它是客户端,但是如果您正在为与 ajax 通信进行散列,或者您不想将钱花在 ssl 证书上,那么这可能是要走的路。

    最常见的哈希算法是 md5 和 sha256。现在,因为这些是算法,所以它们不需要被编码到语言中(就像它们在 php 中一样),但可以用该语言编写。一些非常聪明的人已经为你做了艰苦的工作,现在你只需要获取他们的来源。

    MD5:http://www.webtoolkit.info/javascript-md5.html
    SHA256:http://www.bichlmeier.info/sha256.html

    【讨论】:

      【解决方案3】:

      更现代的方法

      在PHP 中,使用:

      $hash = hash('sha256', "here_is_my_input_string");
      

      然后在 JavaScript 中你可以使用Web Crypto API:

      function hashAsync(algo, str) {
        return crypto.subtle.digest(algo, new TextEncoder("utf-8").encode(str)).then(buf => {
          return Array.prototype.map.call(new Uint8Array(buf), x=>(('00'+x.toString(16)).slice(-2))).join('');
        });
      }
      
      hashAsync("SHA-256", "here_is_my_input_string").then(outputHash => console.log(outputHash));
      // prints: 4bb047046382f9c2aeb32ae6d2e43439f05d11bd74658f1d160755ff48114364 which also matches 3rd party site: https://emn178.github.io/online-tools/sha256.html
      

      感谢https://stackoverflow.com/a/55926440/470749

      【讨论】:

        猜你喜欢
        • 2019-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-08-17
        • 1970-01-01
        • 2018-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多