Ошибка с расшифровкой для "Не удалось выполнить распаковку: недействительный байтовый байт".

Используя CF8 и MySQL 5.1, я пытаюсь зашифровать() пароль при создании и затем дешифровать() при входе в систему. Я могу заставить decrypt() работать нормально на тестовой странице, но когда я помещаю его на страницу cfincluded с cflogin, я получаю сообщение об ошибке "Произошла ошибка при попытке шифрования или расшифровки вашей входной строки: com.rsa.jsafe.crypto.dr: Не удалось выполнить unpadding: invalid pad byte..". Это тот же код и БД с моей тестовой страницы в мое приложение.

application.cfc:

тестовая страница, которая отлично работает:

FORM DATA: 
form password:<cfoutput>#form.passwd#</cfoutput>
<cfset encrypted="Encrypt(form.passwd,Request.PasswordKey,Request.algorithm,Request.encoding)">
Encrypted: <cfoutput>#encrypted#</cfoutput>
Decrypted: <cfoutput>#Decrypt(variables.encrypted,Request.PasswordKey,Request.algorithm,Request.encoding)#</cfoutput>

QUERY DATA

<cfoutput>qLogin password: #qlogin.encPasswd#</cfoutput>
<cfoutput>Decrypted encPasswd from qLogin: #Decrypt(qlogin.encPasswd,Request.PasswordKey,Request.algorithm,Request.encoding)#</cfoutput>
</cfset>

Расшифровать() на странице приложения, которая является ошибкой:

Я могу получить по умолчанию CFMX_COMPAT encrypt() и decrypt(), чтобы нормально работать в моем приложении с тем же кодом, просто изменяя переменные ключа, алгоритма и кодировки. Кстати, я также сохраняю зашифрованные строки как varchar() в БД, поэтому он не испортит заполнение (поэтому я читаю). Я попробовал BLOB, но получил ошибку bytearray.

Любая помощь или мысли очень приветствуются.

2 ответа

Вы создаете новый секретный ключ для каждого запроса,

На самом деле ваш код должен быть больше похож:

<cffunction name="onApplicationStart" returntype="boolean" output="false">
 </cffunction>
<cffunction name="onRequestStart" returntype="boolean" output="false">
 <cfset request.passwordkey="application.PasswordKey">
 <cfset request.algorithm="AES">
 </cfset></cfset></cffunction>

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


Отключить jsafe. Добавить -Dcoldfusion.disablejsafe = true в конфигурацию jvm.

licensed under cc by-sa 3.0 with attribution.