Javascript Sha256 与 PHP Sha256 : Line breaks create different hash?

标签 javascript php hash sha256

添加换行符后我得到两个不同的哈希值。

在此站点上 http://www.xorbin.com/tools/sha256-hash-calculator有一个 JavaScript Sha256 哈希生成器。

当我对“onetwo”运行哈希时,我得到:

25b6746d5172ed6352966a013d93ac846e1110d5a25e8f183b5931f4688842a1

当我使用 PHP 时

echo hash('sha256', 'onetwo');

我得到:

25b6746d5172ed6352966a013d93ac846e1110d5a25e8f183b5931f4688842a1

但是当我从包含换行符(返回)的 URL 运行哈希时:

'one
two'

我得到:

21066d108d5319ecb5a1fc4454f42ef22fc5f1c7df49c31d90294950e0ea8b2c

但是当我使用 PHP 时,我得到:

29a776bb35efe730dabb1b1d3ad74dbf80cc3e9009e168241798ea73adca3dcf

谁能指出为什么会这样?为什么添加换行符会产生不同的结果?

这是我的 PHP/HTML 代码,您将看到我正在使用一个表单并提交要进行哈希处理的数据。

<!DOCTYPE HTML>
<html>
  <head>
    <title>Sha256 Hash</title>
  </head>
  <body>
    <div style="float: left;">
      Start here and insert text below to be hashed.<br />
      <form name="submit hash" action="" method="POST">
        <textarea name="text" style="border: thin solid #000; width: 500px; padding: 10px; height: 500px;"><? if($_SERVER['REQUEST_METHOD'] == 'POST') echo $_POST['text']; ?></textarea>
        <br style="clear: both;" />
        <input type="submit" name="submit" value="submit" />
      </form>
    </div>
    <? if($_SERVER['REQUEST_METHOD'] == 'POST'): ?>
    <div style="border: thin solid #000; margin: 10px; padding: 10px; float: left;">
      <br />sha256:&nbsp;&nbsp;<b><?= hash('sha256',$_POST['text']); ?></b><br />
    </div>
    <? endif; ?>
  </body>
</html>

最佳答案

@mrjoltcola 是对的。

从文本区域获取值时,新行是\r\n (CRLF)。

您可以在您的 php 代码中通过打印您读取的字符串的 url 编码版本来验证这一点:

var_dump(urlencode($_POST['text']));

这将打印 string(12) "one%0D%0Attwo" 如果您输入

one
two

其中 %0D 是回车的 html 代码,%0A 是换行的 html 代码,如您所见 here .

现在获取与 javascript version 中相同的哈希值你必须删除回车。你可以像这样在 php 中做到这一点:

$string_to_be_hashed = preg_replace( "/\r\n/", "\n", $_POST['text'] );

然后,如果您对 $string_to_be_hashed 进行哈希处理,您将获得预期的结果。

在 javascript 版本中,这也在内部发生。如果您检查 hash256 source code有一个 Utf8Encode(string) 函数,其中第一行是 string = string.replace(/\r\n/g,"\n"); 这是必不可少的一样。

关于Javascript Sha256 与 PHP Sha256 : Line breaks create different hash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32264391/

相关文章:

php - 从PHP中找不到Throw 404

c++ - python <=> c++ 跨语言哈希

Python UnicodeEncodeError,但我已将参数编码为 UTF-8

php - 如何进行WordPress身份验证?

arrays - Ruby 数组哈希值问题

javascript - Bootstrap Modal 将背景涂黑

javascript - 如何从外部js文件渲染html

javascript - 帮助 Mootools Gallery - 过渡文本

javascript - jQuery 切换菜单下拉菜单

php - SQL 中的排序不是 100% 正确