ColdFusion相当于PHP Unpack和SHA1

Bra*_*ash 1 php coldfusion

这是我的问题.在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"呢?

我知道这涉及到我在这两个问题上已经被困了一段时间了......任何帮助都非常感谢.

Lei*_*igh 5

使用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)