这是我的问题。在PHP中有两个函数,我很难在ColdFusion中复制。
1)PHP的解包功能,让您以给定的方式格式化输出。其中一种格式选项是' H'代表"十六进制字符串,高半字节优先" - 我怎么能在ColdFusion中复制它?
这就是我到目前为止......
<cfscript>
function stringToBinary( String stringValue ){
var base64Value = toBase64( stringValue );
var binaryValue = toBinary( base64Value );
return( binaryValue );
}
function stringToHex( String stringValue ){
var binaryValue = stringToBinary( stringValue );
var hexValue = binaryEncode( binaryValue, "hex" );
return( lcase( hexValue ) );
}
</cfscript>
所以我不能指出在上面的实现中指定高半字节(同样,我没有写这个冷却,这是由Ben Nadel提供的)。
其次,在PHP中有一个用于散列的SHA1函数...该函数有一个参数,它是&#34的布尔参数;如果可选的raw_output设置为TRUE,那么sha1摘要而是以原始二进制格式 返回,长度为20 ,否则返回的值为40个字符的十六进制数。&#34;所以我的Coldfusion模仿这就是使用Hash()函数并指定它来使用&#34; SHA-1&#34;然后将其转换为二进制...但我如何正确地限制它&#34;到20&#34;以与PHP相同的方式?
我知道这涉及到我在这两个问题上已经被困了很长时间......非常感谢任何帮助。
答案 0 :(得分:5)
使用Hash()函数和 指定它使用&#34; SHA-1&#34;然后将其转换为二进制...但是 我将如何正确地限制它&#34;到20&#34;
你不需要做任何事情。 SHA1 produces 160 bits。二进制结果将始终为20个字节,或40个字符编码为hexadecimal(每个字节两个字符)。
hashString = hash("Something wicked this way comes", "sha1");
hashBinary = binaryDecode( hashString, "hex");
writeOutput(" String / len("& len(hashString) &")");
writeOutput(" Binary / arrayLen("& arrayLen(hashBinary) &")");
&#39; H&#39;代表&#34;十六进制字符串,高半字节优先&#34; 想出在上面的实现中指定高半字节
您是否认为必须做一些特殊/额外的事情?根据我的阅读,用于在PHP中生成十六进制的典型函数,即bin2hex,默认为高半字节,CF也是如此。除了CF将结果转换为大写的事实之外,结果是相同的。您能否提供PHP和CF结果不同的具体示例?
<强> PHP:强>
echo bin2hex("Green Onions");
// result: 477265656e204f6e696f6e73
<强> CF 强>
writeDump( binaryEncode(charsetDecode("Green Onions", "utf-8"), "hex") );
// result: 477265656E204F6E696F6E73