我无法理解如何用空字节填充 CF 中的字符串。在Java中我会这样做......
String ZeroPad = "";
for (int i = 0; i < 32; i++)
ZeroPad = ZeroPad + "\0";
String strKey = strUsername + strPassword + ZeroPad;
strKey = strKey.substring(0, 32);
但是在 ColdFusion 中执行以下操作会产生类似“\0\0...”的内容,而不是空字节。
<cfset var key = arguments.username&arguments.password/>
<cfloop condition="#len(key)# less than 32">
<cfset key = key & "\0"/>
</cfloop>
<cfset key = key.substring(0,32)/>
继续出现问题。好的,我已经将我的 CFML 更新为此...
<cfset var strB = createObject("java", "java.lang.StringBuilder")/>
<cfloop from=1 to=32 index="i">
<cfset zeroPad = zeroPad & URLDecode("%00")/>
</cfloop>
<cfset strB.append(arguments.username)/>
<cfset strB.append(arguments.password)/>
<cfset strB.append(zeroPad)/>
<cfif strB.length() GT 32>
<cfset key = strB.substring(0,32)/>
<cfelse>
<cfset key = strB.toString()/>
</cfif>
生成的密钥用于 AES 加密。在我的本地开发计算机(Mac OS X Mavericks)上,这工作正常,我可以使用生成的密钥进行加密。但是,在我的生产环境 (Windows Server 2008) 上,我收到错误“密钥大小无效”。两者的密钥大小都显示为 32,我很困惑。
我用过this tip http://www.coldfusiondeveloper.com.au/null-character/过去,即:URLDecode("%00", "utf-8")
Update:
自从encrypt()
函数始终将纯文本输入解释为 UTF-8 字符串,您也可以使用charsetEncode(字节,“utf-8”) http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f63.html从单个元素字节数组创建空字符。
charsetEncode( javacast("byte[]", [0] ), "utf-8");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)