我正在将CloudTrax的php示例代码(它是一个wifi接入点)转换为ColdFusion。我遇到了一行代码问题。连接两种数据类型。我尝试了多次,但无法让它工作。我不确定php在内部做什么,或者是否在内部转换数据以使其正常工作。
$ hexchall< - binary
$ secret< - string
PHP
$crypt_secret = md5($hexchall . $secret, TRUE)
CFM
binaryDecode(lcase(hash(hexchall&secret,"MD5")),"hex")
Coldfusion响应: ByteArray对象无法转换为字符串。
如果我在二进制文件上使用CharsetEncode()
,它就不再匹配php的输出。
答案 0 :(得分:1)
我不是一个虚拟人,但我很确定你不能只连接CF方面的两个变量。除非两个值共享相同的编码。相反,尝试将两个值解码为二进制,合并它们,然后散列合并的数组。我怀疑这就是PHP在内部所做的事情。
确切的代码会根据字符串的编码而有所不同,但这样的内容应该适用于CF10 +。
<强> CF:强>
// decode both values into binary
hexchall = binaryDecode("546869732069732062696e617279", "hex");
secret = charsetDecode("this is a secret", "utf-8");
// merge the binary into a single array
// note: arrayAppend will not work with these values
util = createObject("java", "org.apache.commons.lang.ArrayUtils");
mergedBytes = util.addAll(hexchall, secret);
// finally, hash the binary
crypt_secret = lcase(hash( mergedBytes, "md5"));
writeDump(crypt_secret);
<强> PHP:强>
$hexchall = hex2Bin("546869732069732062696e617279");
$secret = "this is a secret";
$crypt_secret = md5($hexchall. $secret, TRUE);
print_r(bin2hex($crypt_secret));
<强>结果:强>
2e7840389862afdc913c51df5f394125