这是我的问题.在PHP中有两个函数,我很难在ColdFusion中复制.
1)PHP的解包功能,让你以给定的方式格式化输出.其中一种格式选项是"H",它代表"Hex string,high nibble first" - 我怎么能在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>
Run Code Online (Sandbox Code Playgroud)
所以我无法弄清楚在上面的实现中指定高半字节(同样,我没有写这个coldfusion这是由Ben Nadel提供的).
其次,在PHP中存在的一个散列函数SHA1 ...有一种说法该函数是"如果可选raw_output设置为TRUE,则SHA1摘要:布尔值代替原始的二进制格式返回 了长度为20,否则返回值为40个字符的十六进制数." 所以我的Coldfusion模仿这只是使用Hash()函数并指定它使用"SHA-1"然后将其转换为二进制...但我怎么能以与PHP完全相同的方式正确地将它"限制为20"呢?
我知道这涉及到我在这两个问题上已经被困了一段时间了......任何帮助都非常感谢.
使用Hash()函数并指定它使用"SHA-1"然后将其转换为二进制...但我如何正确地将它"限制为20"
你不需要做任何事情.SHA1产生160位.二进制结果将始终为20个字节,或40个字符编码为十六进制(每个字节两个字符).
hashString = hash("Something wicked this way comes", "sha1");
hashBinary = binaryDecode( hashString, "hex");
writeOutput(" String / len("& len(hashString) &")");
writeOutput(" Binary / arrayLen("& arrayLen(hashBinary) &")");
Run Code Online (Sandbox Code Playgroud)
'H'代表"Hex string,high nibble first",指出在上面的实现中指定高半字节
你有什么特别的理由认为你必须做一些特殊的/额外的事情吗?根据我的阅读,用于在PHP中生成十六进制的典型函数,即bin2hex,首先默认为高半字节,CF也是如此.除了CF将结果转换为大写的事实之外,结果是相同的.您能否提供PHP和CF结果不同的具体示例?
PHP:
echo bin2hex("Green Onions");
// result: 477265656e204f6e696f6e73
Run Code Online (Sandbox Code Playgroud)
CF
writeDump( binaryEncode(charsetDecode("Green Onions", "utf-8"), "hex") );
// result: 477265656E204F6E696F6E73
Run Code Online (Sandbox Code Playgroud)