【问题标题】:SHA1 hmac PHP vs Javascript - Different Results?SHA1 hmac PHP vs Javascript - 不同的结果?
【发布时间】:2010-12-30 19:14:24
【问题描述】:

你好 我在 javascript 中使用类来散列字符串: https://ssl.bsk.com.pl/mobi/js/sha1.js

hex_hmac_sha1("927545161", "asdasdasdasdś") ;

结果是: 5db0194c834d419fc5d68b72c88af1ac8ee749d6

在 PHP 中我正在散列:

echo hash_hmac('sha1', "asdasdasdasdś", '927545161');

但结果是: 0b115775a20bed9922b6a9cc934cb5328fe71ade

哪里出错了? 5db0194c834d419fc5d68b72c88af1ac8ee749d6 != 0b115775a20bed9922b6a9cc934cb5328fe71ade

【问题讨论】:

  • 我也猜这与文件编码/unicode问题有关
  • 我知道。我在 php 和 JS 页面中使用 UTF-8。问题出在 UTF-8 字符上: 5db0194c834d419fc5d68b72c88af1ac8ee749d6

标签: php javascript sha1


【解决方案1】:

PHP 将 UTF-8 字符串解释为 8 位字符序列。而在 Javascript 中,每个字符都可以解析为一个 Unicode 代码点。

您的压缩且完全不可读的 Javascript 实现使用 .charCodeAt() 将字符串转换为十六进制字符串。我没有费心去彻底调查它,但很可能"ś".charCodeAt(0) 只是简单地解析为347,并且转换的其余部分期望在0255 的8 位范围内的值。

【讨论】:

  • 你是对的。它适用于hex_hmac_sha1("927545161", "asdasdasdasd\xC5\x9B") == "0b115775a20bed9922b6a9cc934cb5328fe71ade"
  • 我无法更改 JS scruot,因为这是在其他服务器上。我需要登录php到一边-有这个登录安全PHP中是否有一些解决方案?
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多