Я работаю с некоторым устаревшим кодом, пытаясь заменить 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.