我正在使用ColdFusion进行加密和解密。我有一个值为1的变量active。我想创建一个包含active的加密值的URL,如:
http://localhost:8500/blueline/ActivateRegistration.cfm?email=abc@gmail.com&active=!#
此处!#
是加密值1。
在另一端即ActivateRegistration.cfm我需要使用相同的私钥解密active
并找到原始值。但是当我尝试以下代码时,我没有得到正确的加密字符串:
<cfset activeValue = url.active>
原因是加密值还包含字符串中的特殊字符#
。有人可以帮忙吗?另外我如何处理ColdFusion特殊字符/关键字?
答案 0 :(得分:5)
其他人已经介绍了如何逃避URL值中出现的URL有意义的字符,但是最后一个难题是澄清/纠正。
您对加密字符串没有问题,因为#是ColdFusion 的特殊字符,因为它在URL本身中具有特殊含义。在URL中,#是服务器上文档的地址与文档中目标的特定片段(即:书签/锚标签)之间的分隔符。由于此信息被认为与服务器无关,因此浏览器从不发送它,因此服务器永远不会收到它。
它类似于你有一个参数值,它本身有一个嵌入的&符号(&amp;):就URL而言,这是参数之间的分隔符,而不是参数值的一部分,所以CF不会看到作为URL变量值的一部分,它将它视为两个变量之间的分隔符。
为避免所有这些混淆,正如其他受访者所说,您需要始终对需要在包含meaningful to the URL-addressing schema itself字符的网址上进行网址编码。
答案 1 :(得分:0)
<cfparam name="url.active" default="">
<cfoutput>
<a href="#cgi.script_name#?active=#urlEncodedFormat('!##')#">This String Contains CFML Values</a>
#urlDecode(url.active)#
</cfoutput>
您需要做几件事。
#
个字符替换为##
,以便为ColdFusion转义它们。 正如Leigh所说,我想看看你如何生成这个加密文本以更好地帮助你。