我使用以下代码加密用户密码。
<cfset "EncryptedNewPass" = Encrypt(#HTMLCodeFormat(NewPass)#, Request.PasswordKey)>
然后将它与存储在数据库中的值进行比较,它可以正常工作。但是,如果我从数据库中获取值并使用decrypt,如下所示
<cfset DecryptedPass = Decrypt(#getOrigPassFP.pass#, Request.PasswordKey)>
并执行cfout,该值包含<pre> </pre>
标记。我遇到的问题是因为我们也使用密码打开PDF文档,这是一个错误。我尝试使用replace来剥离标记但是当它显示或传递给变量时,它仍然包含<pre>
标记。
答案 0 :(得分:9)
您自己将<pre>
标记放在那里!!您认为HTMLCodeFormat()
的作用是什么?!
答案 1 :(得分:2)
来自评论:我理解你在说什么,但我的问题是如何在加密之前删除预标签?
以下代码是如何从解密值中删除<PRE>
和</PRE>
标记的示例。 (我输出所有值,以便您在执行此代码时可以继续。)
<cfset NewPass = "this_is_the_password">
<cfset PasswordKey = "this_is_the_really_weak_key">
<cfset EncryptedNewPass = Encrypt(HTMLCodeFormat(NewPass), PasswordKey)>
<cfset DecryptedPass = Decrypt(EncryptedNewPass, PasswordKey)>
<cfoutput>
<p>NewPass = #NewPass#</p>
<p>PasswordKey = #PasswordKey#</p>
<p>EncryptedNewPass = #EncryptedNewPass#</p>
<p>DecryptedPass = #HTMLEditFormat(DecryptedPass)#</p>
<cfif Left(DecryptedPass,5) EQ "<PRE>">
<cfset DecryptedPass = Right(DecryptedPass,(Len(DecryptedPass)-5))>
<p>Found and removed <PRE> tag = #HTMLEditFormat(DecryptedPass)#</p>
</cfif>
<cfif Right(DecryptedPass,6) EQ "</PRE>">
<cfset DecryptedPass = Left(DecryptedPass,(Len(DecryptedPass)-6))>
<p>Found and removed </PRE> tag = #HTMLEditFormat(DecryptedPass)#</p>
</cfif>
</cfoutput>
查看该代码,此块将从字符串的开头删除<PRE>
:
<cfif Left(DecryptedPass,5) EQ "<PRE>">
<cfset DecryptedPass = Right(DecryptedPass,(Len(DecryptedPass)-5))>
<p>Found and removed <PRE> tag = #HTMLEditFormat(DecryptedPass)#</p>
</cfif>
此块将从字符串末尾删除</PRE>
:
<cfif Right(DecryptedPass,6) EQ "</PRE>">
<cfset DecryptedPass = Left(DecryptedPass,(Len(DecryptedPass)-6))>
<p>Found and removed </PRE> tag = #HTMLEditFormat(DecryptedPass)#</p>
</cfif>
我只使用HTMLEditFormat()
输出您要在浏览器中查看的值。在加密或解密您的值时,请勿使用这些功能。
您还需要注意HTMLCodeFormat()
函数不仅仅包含<PRE>
标记中的给定字符串。该函数还会将字符<
,>
,&
和"
更改为与其HTML字符实体等效的字符。如果您的任何用户在其密码中使用了这些字符,那么您对它们的解密将失败(将不等于其实际密码)。
此函数将以下字符转换为HTML字符实体:
Text character Encoding
< <
> >
& &
" "