Encryption 使用特殊字符的Coldfusion解密

Encryption 使用特殊字符的Coldfusion解密,encryption,coldfusion,Encryption,Coldfusion,如何用标准算法和特殊字符解密Coldfusion 例如: <cfoutput>#encrypt("123",key, "CFMX_COMPAT", "UU")#</cfoutput> #加密(“123”,密钥,“CFMX兼容”,“UU”)# 结果:#-u G4 如果我试图解密这个 <cfoutput>#decrypt("#-_G4",key,"CFMX_COMPAT", "UU")#</cfoutput> #解密(#-#G4),密钥,“CFM

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

例如:

<cfoutput>#encrypt("123",key, "CFMX_COMPAT", "UU")#</cfoutput>
#加密(“123”,密钥,“CFMX兼容”,“UU”)#
结果:#-u G4

如果我试图解密这个

<cfoutput>#decrypt("#-_G4",key,"CFMX_COMPAT", "UU")#</cfoutput>
#解密(#-#G4),密钥,“CFMX_COMPAT”,“UU”)#
我会得到一个错误。
我知道在这个例子中,我应该切换到。但是我应该如何处理数据库中的其他特殊字符呢?如何自动转义解密函数的所有特殊字符?

这些CFMX兼容ID用于什么?我会避免使用它们,因为这种算法只适用于ColdFusion,而且是可以猜测的。如果您想为可以在URL中使用的整数使用安全、简短、不可使用的哈希,HashID是最好的解决方案

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

似乎是single造成了问题。只需将加密字符串的输出存储在一个变量中,并将其放置在解密位置。它会起作用的

 <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>

#加密(“123”,密钥,“CFMX\u COMPAT”,“UU”)#
#解密(“encryptedText”,密钥,“CFMX\u COMPAT”,“UU”)#
我会得到一个错误。我知道在这个例子中,我应该切换到
##
。但是我应该如何处理数据库中的其他特殊字符呢

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

“找到无效的CFML构造…”是一个编译错误。它发生在任何CF代码执行之前。在您的示例中出现这种情况的唯一原因是
#
嵌入在CF代码本身中。因此,当CF服务器解析和编译代码时,它会将未转义符号视为某种变量的开始,并查找结束符号
。当它找不到预期的位置时,会导致错误,编译失败。因此,只有当符号包含在实际的CF代码(或计算为CF代码的字符串)中时,未转义的
#
符号才是一个问题

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


话虽如此,你真的不应该在任何事情上使用CFMX\u COMPAT。它根本不是真正的加密,而是一种仅为向后兼容而维护的遗留混淆算法。而是使用真正的加密算法,如AES、Blowfish等。您可能还希望使用“base64”或“hex”而不是“UU”,因为前者更便于移植。有关支持的算法的列表,请参阅。

您已经测试过它,它不会给出错误。我只是测试了一下,效果很好。只需正确定义键。它会给您带来什么错误?在第26行第26列发现无效的CFML构造。ColdFusion正在查看以下文本:/“尝试使用密钥加密和解密”123使用上述密钥可以正常工作。顺便说一句,您使用的是哪个版本的CF?我正在CF11和CF9上进行尝试。