gpt4 book ai didi

base64 - 2 台不同机器上 CFML 中 toBase64() 的不同输出

转载 作者:行者123 更新时间:2023-12-04 08:49:37 25 4
gpt4 key购买 nike

最终编辑:已解决 ,将本地开发升级到 railo 3.3.4.003 解决了这个问题。

我必须对一些字符串进行 RC4 加密并将它们进行 base64 编码,我遇到了这样一种情况,即相同的输入将在 2 个不同的开发设置上生成不同的输出。

例如,如果我有一个字符串 test2@mail.com在一台机器 (DEV-1) 上,我会得到:DunU+ucIPz/Z7Ar+HTw=另一方面(DEV-2)它将是:DunU+ucIlZfZ7Ar+HTw=
首先,我 rc4 通过 function found here 对其进行加密.
接下来我将它喂给:toBase64( my_rc4_encrypted_data, "iso-8859-1")
据我所知,rc4 加密输出在两者上都是相同的(或者我遗漏了一些东西)。
下面是来自两台机器的 SERVER 变量以及加密函数。

这是我们必须忍受的事情还是我可以做些什么来“正确处理它”(因为缺乏更好的词)。
我担心将来这会咬我,并想知道它可以避免。

编辑 1:
my_rc4_encrypted_data.getBytes() 的输出返回:
开发-1:

Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60

开发-2:
Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60

(没有编码传递给 getBytes() )

DEV-1(远程)
server.coldfusion
productname Railo
productversion 9,0,0,1

server.java
archModel 64
vendor Sun Microsystems Inc.
version 1.6.0_26

server.os
arch amd64
archModel 64
name Windows Server 2008 R2
version 6.1

server.railo
version 3.3.2.002

server.servlet
name Resin/4.0.18

DEV-2(本地)
server.coldfusion
productname Railo
productversion 9,0,0,1

server.java
vendor Oracle Corporation
version 1.7.0_01

server.os
arch x86
name Windows 7
version 6.1

server.railo
version 3.2.2.000

server.servlet
name Resin/4.0.18

RC4 功能:
function RC4(strPwd,plaintxt) {
var sbox = ArrayNew(1);
var key = ArrayNew(1);
var tempSwap = 0;
var a = 0;
var b = 0;
var intLength = len(strPwd);
var temp = 0;
var i = 0;
var j = 0;
var k = 0;
var cipherby = 0;
var cipher = "";

for(a=0; a lte 255; a=a+1) {
key[a + 1] = asc(mid(strPwd,(a MOD intLength)+1,1));
sbox[a + 1] = a;
}

for(a=0; a lte 255; a=a+1) {
b = (b + sbox[a + 1] + key[a + 1]) Mod 256;
tempSwap = sbox[a + 1];
sbox[a + 1] = sbox[b + 1];
sbox[b + 1] = tempSwap;
}

for(a=1; a lte len(plaintxt); a=a+1) {
i = (i + 1) mod 256;
j = (j + sbox[i + 1]) Mod 256;
temp = sbox[i + 1];
sbox[i + 1] = sbox[j + 1];
sbox[j + 1] = temp;
k = sbox[((sbox[i + 1] + sbox[j + 1]) mod 256) + 1];
cipherby = BitXor(asc(mid(plaintxt, a, 1)), k);
cipher = cipher & chr(cipherby);
}
return cipher;
}

最佳答案

利写道:

But be sure to use the same encoding in your test ie String.getBytes(encoding) (Edit) If you omit it, the jvm default is used.



Leigh 是对的 - RAILO-1393导致 change到与 3.3.0.017 中的字符集编码相关的 toBase64,它介于您正在使用的 3.3.2.002 和 3.2.2.000 版本之间。

关于base64 - 2 台不同机器上 CFML 中 toBase64() 的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287773/

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