PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-Coldfusion pack(相当于H *大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图在Coldfusion中模拟PHP函数.以下的PHP输出

<?PHP echo (strtoupper(hash_hmac('SHA256', 'a cow jumps over the moom', pack('H*','specialkey')))); ?>

E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35中的结果

在CF中尝试时

<cfset z=hmac("a cow jumps over the moom", "specialkey","HMACSHA256")>

结果是1A905E37DC5F7544E170FB2D47743417AFC7CC0CE53188F30E78BC09D3A61ADF

显然是与pack(H *部分,就像我跑

<?PHP echo (strtoupper(hash_hmac('SHA256', 'a cow jumps over the moom', 'specialkey'))); ?>

结果是
1A905E37DC5F7544E170FB2D47743417AFC7CC0CE53188F30E78BC09D3A61ADF

如何在PHP中模拟包(H *?我需要在CF中返回结果E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35吗?

解决方法:

尽管看起来双方都在使用相同的密钥-但事实并非如此.

为了@L_197_8@HMAC,PHP和CF都必须首先将值解码为二进制,并且该值实际上是用作“密钥”的值.得到不同结果的原因是,双方对密钥值的解码方式不同:PHP使用JVM认值(即UTF-8,ASCII等)从hexadecimal和CF将其解码为纯字符串.结果,PHP和CF@L_197_8@完全不同的密钥,这就是HMAC代码不匹配的原因.

如此,我注意到您的键值“ specialkey”实际上不是有效的十六进制字符串.因此,在花费大量时间之前,我的问题是PHP代码是否真的使用诸如“ specialkey”之类的任意字符串,还是仅出于测试目的?如果实际代码使用有效的十六进制字符串,则只需将二进制密钥传递给CF的HMAC函数,结果应相同:

ColdFusion:

writeOutput( hmac("a cow jumps over the moom"
            , binaryDecode("7370656369616c6b6579", "hex")
            , "HMACSHA256"));

PHP

echo (strtoupper(hash_hmac('SHA256', 'a cow jumps over the moom', pack('H*','7370656369616c6b6579'))));

结果:

1A905E37DC5F7544E170FB2D47743417AFC7CC0CE53188F30E78BC09D3A61ADF

更新:如果由于某种原因您确实确实需要使用任意字符串作为键,请查看Perl docs for pack(PHP函数基于该键).

免责声明:我并不是一个真正的PHP专家,所以还有更多内容,但是…本质上pack(H *)将您的密钥字符串分解为成对的字符,并将它们解释为十六进制.无效字符(例如“ s”,“ p”,“ i”等)将转换为null或0:

  sp   --> 00  ("s" and "p" are invalid)
  ec   --> EC  ("e" and "c" are valid heX)
  ia   --> 0A  ("i" is invalid, "a" is valid)
  lk   --> 00  ("l" and "k" are both invalid)
  ey   --> E0  ("e" is valid, "y" is invalid)

@L_197_8@的二进制文件是这样的(以十六进制表示):

00 EC 0A 00 E0

如果您将该十六进制字符串解码回二进制文件并将其用作密钥:

hmac("a cow jumps over the moom", binaryDecode("00EC0A00E0", "hex"), "HMACSHA256")

CF返回与PHP相同的结果:

E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35

大佬总结

以上是大佬教程为你收集整理的php-Coldfusion pack(相当于H *全部内容,希望文章能够帮你解决php-Coldfusion pack(相当于H *所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: