Encryption Coldfusion加密和解密
我在使用cf9加密和解密函数时遇到问题。具体来说,我使用的代码需要能够使用AES/ECB/pkcs256进行加密。我正在尝试使用以下代码将数据发布到第三方银行:Encryption Coldfusion加密和解密,encryption,coldfusion,cryptography,coldfusion-9,Encryption,Coldfusion,Cryptography,Coldfusion 9,我在使用cf9加密和解密函数时遇到问题。具体来说,我使用的代码需要能够使用AES/ECB/pkcs256进行加密。我正在尝试使用以下代码将数据发布到第三方银行: <cfparam name="theKey" default="someStaticKey"> <cfset strName = leaddetail.leadlast&','&leaddetail.leadfirst /> <cfset stFields = {requesttyp
<cfparam name="theKey" default="someStaticKey">
<cfset strName = leaddetail.leadlast&','&leaddetail.leadfirst />
<cfset stFields = {requesttype = "eftaddonetimecompletetransaction"
,clientid = "XXXXXX"
,urltoredirect = "#RedirectURl#"
,customerid = "#leaddetail.leadid#"
,isdebitcardonly = "No"
,customername = "#strName#"
,customeraddress1 = "#form.billingaddress#"
,customercity = "#form.billingcity#"
,customerstate = "#form.billingstate#"
,customerzip = "#form.billingzip#"
,cardbillingaddr1 = "#form.billingaddress#"
,cardbillingcity = "#form.billingcity#"
,cardbillingstate = "#form.billingstate#"
,cardbillingzip = "#form.billingzip#"
,accounttype = "CC"
,name_on_card = "#form.leadname#"
,accountnumber = "#form.ccacctnum#"
,expmonth = "#Left(form.ccexpdate,2)#"
,expyear = "#Right(form.ccexpdate,2)#"
,cvvcode = "#form.ccv2#"
,amount = "#NumberFormat(esigninfo.esignpayamt,'9999.99')#"
,startdate = "#DateFormat(Now(),'YYYY-MM-DD')#"
,transactiontypecode = "WEB"}/>
<cfset theEncryptedStr = ToBase64(encrypt(serializeJson(stFields),theKey))>
<!--- shake hands and login to api --->
<cfhttp url="https://www.somebank.com/cgi-bin/wsnvptest.vps" method="post" charset="ISO-8859-1" throwonerror="yes" result="httpResponse">
<!--- login Variables --->
<cfhttpparam type="Header" name="User-Agent" value="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" >
<cfhttpparam type="header" name="Accept" value="application/json" >
<!--- Login Credentials --->
<cfhttpparam type="formfield"name="nvpvar"value="''"/>
<cfhttpparam type="formfield"name="requesttype"value="login"/>
<cfhttpparam type="formfield"name="userid"value="Dauserid"/>
<cfhttpparam type="formfield"name="password"value="password"/>
<cfhttpparam type="formfield"name="requestid"value="#uniquerequestid#"/>
<cfhttpparam type="formfield"name="PostData" value="#theEncryptedStr#"/>
<cfif isDefined('CheckSession.sessionID') AND CheckSession.sessionID NEQ ''>
<cfhttpparam type="formfield"name="sessionid" value="#checkSession.sessionID#"/>
</cfif>
</cfhttp>
由于某些原因,我可以加密但无法解密响应。有没有人在这方面有更多的经验,可以走上成功之路
(从被拒绝的编辑更新) 我正在使用以下脚本解密我的cfhttp响应字符串:
<cfset content = httpResponse.filecontent>
<cfset authdata = structNew()>
<cfloop index="line" list="#content#">
<cfset dtype = listFirst(line, "=")/>
<cfset EncodedString = listRest(line, "=")/>
<cfset authdata[dtype] = EncodedString />
</cfloop>
<cfscript>
keyInBase64 = "Some64baseKey;
// Now decrypt the base64 encoded encryption string
decryptedValue = decrypt(EncodedString , keyInBase64 , "AES/ECB/PKCS5Padding" , "base64" );
WriteDump(variables);
</cfscript>
keyInBase64=“Some64baseKey;
//现在解密base64编码的加密字符串
decryptedValue=decrypt(EncodedString,keyInBase64,“AES/ECB/PKCS5Padding”,“base64”);
WriteDump(变量);
我试图解密的字符串与以下内容类似:
nvpvar=fKsJGJ-Fe-2ZOQUROAE8N8A87USEQPE7DVD5IVRA67CHSVKPWX9TAKLUXKWSCKFC_3;-NW3J6IOQAVCNC4CRNFQ2FQYRHBURFBFDCCMWPK=
encrypt(序列化JSON(stFields),密钥)
首先,这是非AES加密。您省略了算法
参数,因此encrypt()默认为传统算法(最弱)。CFMX\u COMPAT它根本不是一个“真正的”加密算法,所以不要使用它-不管用什么
第二,对于AES,您是。为了使用256位密钥,您必须首先安装
将它们复制到/lib/security/
目录中。然后重新启动CF服务器以应用更改
注意:如果安装了多个JVM,
确保更新正确的版本(如中列出的版本)
CF管理员)
重新启动后,您将能够使用256位密钥进行加密。在ECB模式下,语法为:
-要加密的纯文本字符串
-256位密钥必须是base64编码的密钥
-表示所需算法、模式和填充方案的单个字符串。注意:“AES”实际上是较长的“AES/ECB/PKCS5P”的缩写算法
-“将数据表示为字符串的二进制编码”编码
<cfscript>
// some sample data to encrypt
stFields = { clientid = "AA-BB-CC-123"
, customername = "ABC Incorporated"
};
// some 256 bit key, must be base64 encoded
// hard coded for demo purposes only
keyInBase64 = "9NJU2L3FZ8Rr0WKZUFC3lyE/yRrQ7sIZmQRk3kx9MLE=";
// AES encrypt the value, and base64 encode the result
encryptedValue = encrypt( serializeJson(stFields)
, keyInBase64
, "AES/ECB/PKCS5Padding"
, "base64"
);
// Now decrypt the base64 encoded encryption string
decryptedValue = decrypt( encryptedValue
, keyInBase64
, "AES/ECB/PKCS5Padding"
, "base64"
);
// display results
WriteDump( variables );
</cfscript>
不过这些只是猜测。请检查您的API。返回响应的实际格式是什么?另外,您是否可以添加完整的错误消息
encrypt(序列化JSON(stFields),密钥)
首先,这是非AES加密。您省略了算法
参数,因此encrypt()默认为传统算法(最弱)。CFMX\u COMPAT它根本不是一个“真正的”加密算法,所以不要使用它-不管用什么
第二,对于AES,您是。为了使用256位密钥,您必须首先安装
将它们复制到/lib/security/
目录中。然后重新启动CF服务器以应用更改
注意:如果安装了多个JVM,
确保更新正确的版本(如中列出的版本)
CF管理员)
重新启动后,您将能够使用256位密钥进行加密。在ECB模式下,语法为:
-要加密的纯文本字符串
-256位密钥必须是base64编码的密钥
-表示所需算法、模式和填充方案的单个字符串。注意:“AES”实际上是较长的“AES/ECB/PKCS5P”的缩写算法
-“将数据表示为字符串的二进制编码”编码
<cfscript>
// some sample data to encrypt
stFields = { clientid = "AA-BB-CC-123"
, customername = "ABC Incorporated"
};
// some 256 bit key, must be base64 encoded
// hard coded for demo purposes only
keyInBase64 = "9NJU2L3FZ8Rr0WKZUFC3lyE/yRrQ7sIZmQRk3kx9MLE=";
// AES encrypt the value, and base64 encode the result
encryptedValue = encrypt( serializeJson(stFields)
, keyInBase64
, "AES/ECB/PKCS5Padding"
, "base64"
);
// Now decrypt the base64 encoded encryption string
decryptedValue = decrypt( encryptedValue
, keyInBase64
, "AES/ECB/PKCS5Padding"
, "base64"
);
// display results
WriteDump( variables );
</cfscript>
不过,这些只是猜测。请检查您的API。返回响应的实际格式是什么?另外,您是否可以包含完整的错误消息?ECB模式可能不安全。我猜算法不是您自己选择的。是的。您可能会询问改用CBC。ECB模式可能不安全。我猜算法不是您自己的但是,选择什么?是的,。可能会询问使用CBC。这都很好,但是,如何将加密字符串的值输入到cfhttp post中?当我使用此选项时:在参数中,我什么也得不到。不仅如此,当我在转储中使用该变量时,它也不会显示加密值。那么你几乎肯定会这样做您的终端有些不同。1)是否安装了无限加密文件以允许256位密钥?2)是否按原样运行上述代码?首先验证,然后我们可以将其写入您的代码中。是的,我在几天前添加了无限加密并重新启动了服务器。然后,我根据请求复制并粘贴了cfscript,howev呃,当我像前面所说的那样尝试转储时,没有加密字符串。我想我可能发布得太快了。你是对的,当我像你说的那样使用它时,我可以看到转储。我会将其他字段添加到其中,看看我得到了什么。好的,我已经成功地加密了表单字段,并将数据发布到第三方。现在,当我尝试减少使用Httpresponse.filecontent提供的相同javaScript对响应进行加密,我得到一个错误。这一切都很好,但是,如何将加密字符串的值获取到cfhttp post中?当我使用此选项时:在参数中,我什么也得不到。不仅如此,当我在转储中使用该变量时,它不会将加密值显示为好的。那么你几乎肯定在做一些不同的事情。1)你是否安装了无限加密文件以允许256位密钥?2)你是否按原样运行了上面的代码?首先验证一下,然后我们可以将其应用到你的代码中。是的,我几天前添加了无限加密并重新启动了服务器。然后我复制了一个但是,当我尝试按说明转储时,nd按照请求粘贴了cfscript