ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-Coldfusion pack(相当于H *

2019-10-26 10:41:05  阅读:210  来源: 互联网

标签:coldfusion php


我试图在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吗?

解决方法:

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

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

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

00 EC 0A 00 E0

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

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

CF返回与PHP相同的结果:

E9C9E66592306F1BD27A3B1991C7650D4A8920D10E5FFDA955DA692225793F35

标签:coldfusion,php
来源: https://codeday.me/bug/20191026/1936094.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有