Я конвертирую пример PHP-кода для CloudTrax (это точка доступа Wi-Fi) в ColdFusion. У меня возникла проблема со строкой кода. Два типа данных объединены. Я пытался несколько раз, но не могу заставить его работать. Я не уверен, что php делает внутренне, или он конвертирует данные внутренне, чтобы заставить его работать.
$ hexchall <- двоичный
$ секрет <- строка
PHP
$crypt_secret = md5($hexchall . $secret, TRUE)
CFM
binaryDecode(lcase(hash(hexchall&secret,"MD5")),"hex")
Coldfusion отвечает: Объекты ByteArray не могут быть преобразованы в строки.
Если я использую CharsetEncode()
в двоичном коде он больше не соответствует выводу php.
Я не php парень, но я уверен, что вы не можете просто объединить две переменные на стороне 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
Других решений пока нет …