2014-10-13 5 views
-1

Как расшифровать Coldfusion со стандартным алгоритмом и специальными символами?Coldfusion Расшифровка специальными символами

Например:

<cfoutput>#encrypt("123",key, "CFMX_COMPAT", "UU")#</cfoutput> 

результат: # -_ G4

И если я пытаюсь расшифровать эту

<cfoutput>#decrypt("#-_G4",key,"CFMX_COMPAT", "UU")#</cfoutput> 

Я получаю сообщение об ошибке. Я знаю, что в этом примере я должен переключить # на ##. Но что мне делать с другими специальными символами в моей базе данных? Как автоматически избежать всех специальных символов для функции дешифрования?

+0

Вы протестировали его, он не даст ошибку. я просто протестировал его и отлично работал. просто определите ключ правильно. –

+1

Какая ошибка дает вам? –

+0

Invalid CFML конструкция находится на линии 26 в колонке 26. ColdFusion смотрел на следующий текст: /» –

ответ

0

Я получаю сообщение об ошибке. Я знаю, что в этом примере я должен переключить # на ##. Но что мне делать с другими специальными символами в моей базе данных?

Ничего. Вы можете хранить все нужные символы. Вы не получите эту ошибку при вызове decrypt() с вашими значениями запроса.

«Неверная конструкция CFML найдена». - ошибка компиляции. Это происходит до того, как любой CF-код даже выполняется. Единственная причина, по которой это происходит в вашем примере, состоит в том, что # встроен в сам CF-код. Поэтому, когда сервер CF анализирует и компилирует этот код, он видит неэкранированный знак # как начало какой-либо переменной и ищет закрывающий знак #. Когда он не находит тот, где он ожидает, он вызывает ошибку, и компиляция не выполняется. Таким образом, незарегистрированные знаки # являются только проблемой, когда они содержатся в в пределах, что фактический CF-код (или строка, оцененная как CF-код).

Когда вы извлекаете зашифрованный текст из таблицы db, CF не оценивает значения запроса как код. Он просто вытягивает строки из db и передает их в функцию дешифрования. Так что ошибка не может произойти.

Сказав все это, вы действительно не должны использовать CFMX_COMPAT - для чего-либо. Это вовсе не шифрование, а скорее устаревший алгоритм обфускации, поддерживаемый только для обратной совместимости. Вместо этого используйте настоящий алгоритм шифрования, такой как AES, Blowfish и т. Д. Вы также можете использовать «base64» или «hex» вместо «UU», поскольку они бывают более портативными.Список поддерживаемых алгоритмов приведен в encrypt() docs.

0

Для чего используются эти идентификаторы CFMX_COMPAT? Я бы избегал использовать их, поскольку этот алгоритм работает только с ColdFusion и является допустимым. Если вам нужны безопасные, короткие, неописуемые хэши для целых чисел, которые могут использоваться в URL-адресах, лучшим решением является Hashids.

http://hashids.org/coldfusion/

Эта библиотека находится в свободном доступе для JavaScript, Ruby, Python, Java, Scala, PHP, Perl, CoffeeScript, Objective-C, C, C++ 11, Go, Lua, Elixir, ColdFusion, Groovy и для Node.js & .NET. Версия ColdFusion CFC не была совместима с ColdFusion 8, поэтому я использовал версию Java на этом сервере.

0

Кажется, что один # создает проблему. Просто сохраните вывод своей зашифрованной строки в переменной и место ее для расшифровки. Это будет работать.

<cfset key = "15TLe44po"> 
<cfoutput>#encrypt("123",key, "CFMX_COMPAT", "UU")#</cfoutput> 
<cfset encryptedText = encrypt("123",key, "CFMX_COMPAT", "UU") /> 
<cfoutput>#decrypt("#encryptedText#",key,"CFMX_COMPAT", "UU")#</cfoutput> 
<cfabort> 
Смежные вопросы