使用 CF8 和 MySQL 5.1,我试图在创建时加密()密码,然后在登录时解密()。我可以让decrypt() 在测试页面上正常工作,但是当我将它放在带有cflogin 的cfincluded 页面中时,出现错误“尝试加密或解密输入字符串时发生错误:com.rsa.jsafe.crypto .dr:无法执行取消填充:无效填充字节..“。从我的测试页面到我的应用程序,它是相同的代码和数据库。
应用程序.cfc:
<cfif NOT IsDefined("Request.PasswordKey")>
<cfset request.PasswordKey = generateSecretKey("AES")>
<cfset request.algorithm = "AES">
<cfset request.encoding = "hex">
</cfif>
工作正常的测试页面:
FORM DATA: <br/>
form password:<cfoutput>#form.passwd#</cfoutput><br/>
<cfset encrypted = Encrypt(form.passwd,Request.PasswordKey,Request.algorithm,Request.encoding)>
Encrypted: <cfoutput>#encrypted#</cfoutput><br/>
Decrypted: <cfoutput>#Decrypt(variables.encrypted,Request.PasswordKey,Request.algorithm,Request.encoding)#</cfoutput><br/>
<br/>
QUERY DATA<br/>
<cfinvoke component="components.userQ" method="login" returnvariable="qLogin">
<cfinvokeargument name="formData" value="#form#">
</cfinvoke>
<cfoutput>qLogin password: #qlogin.encPasswd#</cfoutput><br/>
<cfoutput>Decrypted encPasswd from qLogin: #Decrypt(qlogin.encPasswd,Request.PasswordKey,Request.algorithm,Request.encoding)#</cfoutput>
应用程序页面中的 Decrypt() 出错:
<cfset unEnPasswd = #Decrypt(qlogin.encPasswd,Request.PasswordKey,Request.algorithm,Request.encoding)#>
我可以让默认的 CFMX_COMPAT encrypt() 和 decrypt() 在我的应用程序中使用相同的代码正常工作,只需更改密钥、算法和编码变量。
顺便说一句,我还将加密的字符串作为 varchar() 存储在数据库中,这样它就不会弄乱填充(所以我读了)。我尝试了 BLOB,但得到一个字节数组错误。
非常感谢任何帮助或想法。