Coldfusion解密特殊字符

时间:2014-10-13 11:34:23

标签: encryption coldfusion

如何使用标准算法和特殊字符解密Coldfusion?

例如:

<cfoutput>#encrypt("123",key, "CFMX_COMPAT", "UU")#</cfoutput>

结果:#-_ G4

如果我尝试解密这个

<cfoutput>#decrypt("#-_G4",key,"CFMX_COMPAT", "UU")#</cfoutput>

我会收到错误。 我知道在这个例子中我应该将#切换到##。但是我应该如何处理我的数据库中的其他特殊字符?如何自动转义解密函数的所有特殊字符?

3 个答案:

答案 0 :(得分:0)

这些CFMX_COMPAT ID用于什么?我避免使用它们,因为这个算法只适用于ColdFusion并且是可猜测的。如果你想要一个可以在URL中使用的整数的安全,简短,不可取的哈希值,Hashids是最好的解决方案。

http://hashids.org/coldfusion/

此库可免费用于JavaScript,Ruby,Python,Java,Scala,PHP,Perl,CoffeeScript,Objective-C,C,C ++ 11,Go,Lua,Elixir,ColdFusion,Groovy和Node.js &安培; 。净。 ColdFusion CFC版本与ColdFusion 8不兼容,因此我在该服务器上使用了Java版本。

答案 1 :(得分:0)

似乎单个#正在创建问题。只需将加密字符串的输出存储在变量中,然后将其放在解密位置即可。它会起作用。

 <cfset key = "15TLe44po">
 <cfoutput>#encrypt("123",key, "CFMX_COMPAT", "UU")#</cfoutput>
 <cfset encryptedText = encrypt("123",key, "CFMX_COMPAT", "UU") />
 <cfoutput>#decrypt("#encryptedText#",key,"CFMX_COMPAT", "UU")#</cfoutput>
 <cfabort>

答案 2 :(得分:0)

  

我会收到错误。我知道在这个例子中我应该将#切换到   ##。但是我应该如何处理我的数据库中的其他特殊字符?

无。您可以存储您想要的任何字符。使用查询值调用decrypt()时,不会出现该错误。

&#34;找到无效的CFML构造..&#34; 是编译错误。它发生在任何CF代码甚至执行之前。它在您的示例中出现的唯一原因是因为#嵌入在CF代码本身中。因此,当CF服务器解析并编译该代码时,它会将未转义的#符号视为某种变量的开头,并查找结束#符号。如果找不到预期的位置,则会导致错误并且编译失败。所以未转义的#符号只有当它们包含在 中的实际CF代码(或者被评估为CF代码的字符串)时才会出现问题。

从db表中检索加密文本时,CF不会将查询值评估为代码。它只是从数据库中提取字符串并将它们移交给解密函数。这样就不会发生错误。

说完了所有这些,你真的不应该使用CFMX_COMPAT - 任何事情。它根本不是真正的加密,而是仅为了向后兼容而维护的传统混淆算法。而是使用真正的加密算法,如AES,Blowfish等。您可能还想使用&#34; base64&#34;或&#34; hex&#34;而不是&#34; UU&#34;,因为他们以前更便携。请参阅encrypt() docs以获取支持的算法列表。