gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:38:49 25 4
gpt4 key购买 nike

我无法理解如何用空字节填充 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>

生成的 key 用于 AES 加密。在我的本地开发机器(Mac OS X Mavericks)上,这工作正常,我能够使用生成的 key 进行加密。但是,在我的生产环境 (Windows Server 2008) 中,我收到错误“ key 大小无效”。两者的 key 大小都显示为 32,我很困惑。

最佳答案

我用过 this tip过去,即:URLDecode("%00", "utf-8")
更新:

encrypt()函数总是将纯文本输入解释为 UTF-8 字符串,您也可以使用 charsetEncode(bytes, "utf-8")从单个元素字节数组创建空字符。

 charsetEncode( javacast("byte[]", [0] ), "utf-8");

关于encryption - 如何在 ColdFusion 中用空/零字节填充字符串以及 MacOS 和 Windows 上的 CF 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com