如何在 ColdFusion 中用空/零字节填充字符串以及 MacOS 和 Windows 上的 CF 之间的差异

2024-03-31

我无法理解如何用空字节填充 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(使用前将#替换为@)

如何在 ColdFusion 中用空/零字节填充字符串以及 MacOS 和 Windows 上的 CF 之间的差异 的相关文章

随机推荐