如何修复此ColdFusion10错误“函数ToBinary的参数1,现在必须是base-64编码的字符串”

时间:2016-07-06 15:20:36

标签: encryption coldfusion coldfusion-10

因此,似乎CF10在生成的加密字符串之间不断添加和实际空间,所以当字符串传递给dercrypt函数时,由于生成的字符串中的空格而失败

字符串示例: KjdTNz4 / K05fTjs Qk8gICAK

  <!--- Decrypt username --->
  <cfset TheKey = '#Session.TheKey#'>
  <cfset userencrypt = "#arguments.username#">
  <cfset username = Decrypt(ToString(ToBinary(userencrypt)), TheKey)>

1 个答案:

答案 0 :(得分:2)

this example on trycf.com可以看出,加密不会增加额外的空格。代码中的其他东西导致了这一点。没有看到实际代码,我们就无法更具体。

那就是说,ToString(ToBinary(...))没有必要。而是使用Decrypt函数"encoding" attribute来指示如何解码加密字符串。

此外,看起来代码正在使用遗留的“CFMX_COMPAT”,这是非常不安全的。 本质上是一种糟糕的混淆算法,强烈建议不要。对于真正的加密,请使用标准算法之一,如AES,BLOWFISH等。

 <!--- demo only: generate new key --->
 <cfset theKey = generateSecretKey("AES")>
 <cfset plainText = "blah, blah, blah">
 <cfset userEncrypt= encrypt(plainText, theKey , "AES", "base64")>
 <cfset userName = Decrypt(userEncrypt, theKey , "AES", "base64")>