Ошибка шифрования URL-адреса ColdFusion

Я работаю с некоторым устаревшим кодом, пытаясь заменить cfusion_encrypt и decrypt, которые устарели в ColdFusion 11. Я получаю следующую ошибку:

Произошла ошибка при попытке зашифровать или расшифровать входную строку: входная и выходная кодировки не совпадают.

Я работал с ответами, найденными в следующем потоке: Скрыть/зашифровать переменные URL в ColdFusion

Сторона шифрования, кажется, работает так, как я ожидал, из-за того, что мой URL-адрес заканчивается чем-то вроде .cfm?LS=%2A2%20J%2FNV16Q%25%5EWJ%40%20%20

Сторона дешифрования, кажется, вызывает у меня проблемы, и я не уверен, что ищу. Вот часть кода, с которым я работаю

Вот как устанавливается шифрование в файлах и откуда был удален cfusion_encrypt.

 <a href="Menu.cfm?<cfoutput>LS=#URLEncodedFormat(Encrypt(LS, key))#</cfoutput>"

В моем файле application.cfm в настоящее время есть этот код

  <cfif isDefined('url.LS')>
  <CFSET URLDecrypt(Key,LS)>

Я попытался заменить на это

<cfif isDefined('url.LS')>
<CFSET url.LS = #Decrypt("#Key#",url.LS)#> 

и код вызывает эту функцию в глобальном файле, совместно используемом всеми приложениями.

 <cfscript>
 function urlDecrypt(key, LS){
 scope = "url";
 i = 0;
 thisPair = "";
 thisName = "";
 thisValue = "";

// Check for valid key
    if (not isDefined('LS'))
        LS = #cgi.Query_String#;

LS = cfusion_Decrypt(#LS#, key);   // Decrypt the Link string back into LS
//writeoutput(ls);  // for DEBUGGING

// set the variables
        for(i = 0; i lt listLen(LS, '&'); i = i + 1)
        {

            // Break up the list into seprate name=value pairs
            thisPair = listGetAt(LS, i + 1, '&');

            // Get the name
            thisName = listGetAt(thisPair, 1, '=');

            // Get the value
            thisValue = listGetAt(thisPair, 2, '=');

            // Set the name with the scope
            thisName = scope & '.' & thisName;

            // Set the variable
            setVariable(thisName, thisValue);
        }
    }

I know the function still has the deprecated cfusion_decrypt in it. I am unsure how that should be replaced.


person kidaiu    schedule 09.12.2015    source источник
comment
Посмотрите на ответ, который @Leigh предоставил на этот другой подобный вопрос - stackoverflow.com/a/22291776/1636917   -  person Miguel-F    schedule 06.01.2016
comment
Как указал Мигель-Ф, основной алгоритм и альтернативу устаревшей функции можно найти в связанном потоке. Не обращайте внимания на C# в заголовке. См. ответ Джеймса Моберга. Тем не менее, эта функция представляет собой нечто большее, чем запутывание, поэтому вам не следует полагаться на нее — или на алгоритм шифрования по умолчанию cfmx_compat — для обеспечения безопасности.   -  person Leigh    schedule 18.01.2016