ColdFusion эквивалентен PHP для распаковки и SHA1

Здесь моя проблема. В 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>

Так что я не могу понять, чтобы указать высокий клев в реализации выше (также, я не писал это Coldfusion, это любезно предоставлено Беном Наделем).

Во-вторых, в PHP есть функция SHA1 для хеширования … для этой функции есть аргумент, который является логическим аргументом для «Если необязательный параметр raw_output имеет значение TRUE, то дайджест sha1 вместо этого возвращается в необработанном двоичном формате длиной 20, в противном случае возвращаемое значение представляет собой шестнадцатеричное число из 40 символов. «Так что мой Coldfusion, чтобы имитировать это, просто использует функцию Hash () и задает ее для использования» SHA-1 «, а затем преобразует это в двоичный файл … но как бы я правильно ограничить его «до 20» точно так же, как PHP?

Я знаю, что это связано с тем, что я уже довольно давно озадачен этими двумя вопросами … Любая помощь очень ценится.

1

Решение

используя функцию 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) &")");

‘H’, что означает «шестнадцатеричная строка, сначала большой клев», чтобы определить высокий клев в приведенной выше реализации

Есть ли конкретная причина, по которой вы считаете, что должны делать что-то особенное / дополнительное? Из того, что я прочитал, типичная функция используется для генерации шестнадцатеричного в PHP, т.е. bin2hex, по умолчанию сначала высокий клев, как и CF. Помимо того, что CF преобразует результаты в верхний регистр, результаты идентичны. Можете ли вы привести конкретный пример того, где результаты PHP и CF отличаются?

PHP:

echo bin2hex("Green Onions");
// result:  477265656e204f6e696f6e73

CF

writeDump( binaryEncode(charsetDecode("Green Onions", "utf-8"), "hex") );
// result: 477265656E204F6E696F6E73
5

Другие решения

Других решений пока нет …