PHP md5转换为Coldfusion for CloudTrax

时间:2016-05-25 00:12:31

标签: php coldfusion

我正在将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的输出。

1 个答案:

答案 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