【问题标题】:How to get a consistent return using hash_hmac()如何使用 hash_hmac() 获得一致的回报
【发布时间】:2015-06-21 13:45:56
【问题描述】:

我收到了一个不同的密码密钥,其中包含hash_hmac(),用于注册时生成的密钥和登录时使用完全相同的代码返回的密钥。

注册时使用的代码是:

$hash_key = 'mL993nHbLJe8dOeC242A8W'; 
    $hmac = hash_hmac('sha256', $pass, $hash_key); 
    $hmac = substr($hmac, 0, 50);

用于创建要比较的键的代码是:

$hash_key = 'mL993nHbLJe8dOeC242A8W'; 
    $hmac = hash_hmac('sha256', $pass, $hash_key); 
    $hmac = substr($hmac, 0, 50);   

这是返回的内容:

53bccd32d23baf691bf9c0a01b0deaa079107a72b72f4a4c08 --- Pass Key Generated by Login
4c30997095ad3f061246ff22d096d3537f1d9d22653f533653 --- Pass Key Retrieved which was Generated at Registration

我正在使用substr($hmac, 0, 50);,它随每次注册而变化,但总是返回 50 个计数。不确定这是否是一个好主意,欢迎提出观点,但无论有没有substr($hmac, 0, 50);,都会出现同样的问题。

我也尝试过sha512 处理同样的问题。

上面的代码在我的计算机上的 wamp 上为我工作,但是当上传到共享主机时,出现了上述问题。 感谢您的帮助,

皮特

【问题讨论】:

  • 你传递给值的 $pass 是什么?
  • 在上面的例子中$pass = '!Pb57Mb56!';
  • 您的主机有什么样的设置?我正在使用 LAMP(Linux Mint 17.1、Apache2、最新稳定的 php),它对我来说返回得很好。
  • (操作系统:linux - Apache:2.2.29 - PHP:5.4.40)该站点托管在 Hostmonster (Bluehost) 不确定确切的 linux
  • 也许这里有什么? stackoverflow.com/questions/362461/… 特别是字符编码部分。

标签: php hash


【解决方案1】:

问题已解决...

在解决这个问题一整天后,它通过将$pass 包装在trim($pass) php 函数中得到了解决。去搞清楚。感谢所有花时间提供意见的人。

皮特

【讨论】:

  • 我昨天也遇到了同样的问题,但是在告诉自己阅读手册us3.php.net/manual/en/function.mcrypt-encrypt.php之后很快就发现了问题所在;必须填充零字节。我很幸运,我只绞尽脑汁 1/2 小时,并在此之前告诉自己:“嘿,这应该可行,我的逻辑是正确的。” - 好吧好吧,零字节添加咬我,但我咬回来。很高兴看到你的问题也解决了,干杯
  • 引自其中一个用户条目:另外, rtrim($decryptedtext, "\0") 比我的懒惰 trim() 更适合删除 NULL 填充... 这是我用来解决问题的方法。在查看我的 HTML 源代码时,看到了那些零字节。
  • 经常自学,只有在遇到问题时才能学到一些东西...我不知道甚至有诸如空填充或零咬之类的东西...哈哈,我没有在您发表评论之前,我什至不知道我用trim() 修复了什么...感谢您的输入。
  • Pete 对我来说也是一样的,当事情不应该加起来时,嗯......手册通常是一个很好的起点。为什么我决定查看我的 HTML 源代码,一定是本能。干杯,不客气。 P.s.:在附加说明中,the manual 声明:将使用给定密码和模式加密的数据。如果数据的大小不是n * blocksize,数据将用'\0'填充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2016-10-27
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
相关资源
最近更新 更多