dev*_*dev 0 php coldfusion hash sha256
我正在致力于加密 URL 并将工作脚本从 PHP 转换为 ColdFusion。我已经完成了 95% 的工作,但在尝试了 StackOverflow 上的许多解决方案后,我陷入了困境。我的结果仍然不匹配。我确认两个脚本上的saltBin和keyBin值是相同的。请看一看。
PHP版本
\n$saltBin = R\xef\xbf\xbdk\xef\xbf\xbd\xef\xbf\xbdE\xef\xbf\xbdx^ \xef\xbf\xbdO<\xef\xbf\xbd-\xef\xbf\xbd7J=S\xef\xbf\xbdz\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd;\n$keyBin = \xef\xbf\xbd;B\xef\xbf\xbd\xef\xbf\xbd|\xef\xbf\xbd \xef\xbf\xbd0U,\xef\xbf\xbd\xef\xbf\xbdh\xef\xbf\xbdNS+\xef\xbf\xbd\xef\xbf\xbd.\xef\xbf\xbd\xef\xbf\xbdG\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\nres = hash_hmac(\'sha256\', $saltBin, $keyBin);\nresult\n39ddcd6156a30fdcebc9fbf5dd59a0ef4f47e27841bbc12ce72b64a0a63c0324\nRun Code Online (Sandbox Code Playgroud)\n冷聚变版本
\n<cfset res = hmac(saltBin,keyBin,"HMACSHA256")>\nresult\n30A658BEB3965C2D7D27A3F717FB6C13B05ED44E8B2A5A7FEBB9B57887CF57A0\nRun Code Online (Sandbox Code Playgroud)\n我尝试过以下解决方案
\n\nColdfusion哈希以及hmacSHA256和SHA256之间的区别
\n更新:
\n下面是PHP版本的缩写版本
\n$key = \'943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881\';\n$salt = \'520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5\';\n$keyBin = pack("H*" , $key);\n$saltBin = pack("H*" , $salt);\n$path = "/rs:fill:300:300:1/g:no/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png";\necho hash_hmac(\'sha256\', $saltBin.$path, $keyBin);\nRun Code Online (Sandbox Code Playgroud)\n结果:7062c2b5786c82de963767de4b0cdbc4e7ed7db2ce7466708bf8a28d8572888b
<cfset key = \'943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881\'>\n<cfset salt = \'520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5\'>\n<cfset keyBin = binaryDecode(key, \'hex\')> \n<cfset keyBin = toString(keyBin)>\n<cfset saltBin = binaryDecode(salt, \'hex\')> \n<cfset saltBin = toString(saltBin)>\n<cfset path = "/rs:fill:300:300:1/g:no/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png">\n<cfset result = hmac(saltBin&path,keyBin,"HMACSHA256")>\n<cfoutput>#result#</cfoutput>\nRun Code Online (Sandbox Code Playgroud)\n结果:FFA7A526BB464CA1470F309605F1ED63832342B704F8475BFAF26CCD1092603B
有人可以在这方面帮助我吗?
\n谢谢。
\n\n\n两个脚本上的 saltBin 和 keyBin 值相同
\n
是的,这些值是相同的,但散列的数据不同。这就是结果不匹配的原因。
\nphp 代码对salt 和路径变量的连接二进制进行哈希处理。使用简单的值来说明:
\n| 数据 | 价值 | 二进制 | Base64 |
|---|---|---|---|
| 盐 | ab | [-85] | qw== |
| 小路 | 123 | [49,50,51] | MTZ |
| 盐+路径 | 不适用 | [-85,49,50,51] | qzEyMw== |
而 CF 代码使用连接字符串salt 和路径的二进制,在使用ToString()进行一些非常......可疑的重新编码之后。正如您所看到的,生成的二进制文件与 php 使用的二进制文件非常不同:
\n| 数据 | 价值 | 二进制 | Base64 |
|---|---|---|---|
| 盐 | \xef\xbf\xbd | [-17,-65,-67] | 77+9 |
| 小路 | 123 | [49,50,51] | MTZ |
| 盐+路径 | \xef\xbf\xbd123 | [-17,-65,-67,49,50,51] | 77+9MTZ |
CF 代码需要连接两个变量的二进制。然后将该二进制文件传递给hmac()函数:
\nCF(参见可运行示例)
\n<cfscript>\n key = \'943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881\';\n salt = \'520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5\';\n keyBin = binaryDecode(key, "hex");\n saltBin = binaryDecode(salt, "hex");\n path = "/rs:fill:300:300:1/g:no/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png";\n pathBin = charsetDecode(path, "utf-8");\n\n // merge binary of salt and path\n combined = [];\n combined.append(saltBin, true);\n combined.append(pathBin, true);\n result = lcase(hmac( javacast("byte[]", combined),keyBin,"HMACSHA256"));\n writeDump(result);\n</cfscript>\nRun Code Online (Sandbox Code Playgroud)\n结果: 7062c2b5786c82de963767de4b0cdbc4e7ed7db2ce7466708bf8a28d8572888b
PHP(参见可运行示例)
\n<?php\n$key = \'943b421c9eb07c830af81030552c86009268de4e532ba2ee2eab8247c6da0881\';\n$salt = \'520f986b998545b4785e0defbc4f3c1203f22de2374a3d53cb7a7fe9fea309c5\';\n$keyBin = pack("H*" , $key);\n$saltBin = pack("H*" , $salt);\n$path = "/rs:fill:300:300:1/g:no/aHR0cDovL2ltZy5leGFtcGxlLmNvbS9wcmV0dHkvaW1hZ2UuanBn.png";\necho hash_hmac(\'sha256\', $saltBin.$path, $keyBin);\nRun Code Online (Sandbox Code Playgroud)\n结果: 7062c2b5786c82de963767de4b0cdbc4e7ed7db2ce7466708bf8a28d8572888b
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |