首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >toBase64()在两台不同机器上的不同输出

toBase64()在两台不同机器上的不同输出
EN

Stack Overflow用户
提问于 2013-01-11 22:33:25
回答 2查看 484关注 0票数 8

最终编辑:解决了,将本地开发升级到Railo3.3.4.003解决了这个问题。

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

例如,如果我有一个字符串test2@mail.com

在一台机器上(DEV-1),我会得到:DunU+ucIPz/Z7Ar+HTw=

另一方面(DEV-2)是:DunU+ucIlZfZ7Ar+HTw=

首先,我正在rc4通过一个函数在这里找到加密它。接下来我要给它喂食:toBase64( my_rc4_encrypted_data, "iso-8859-1")

据我所知,rc4加密输出在这两种情况下都是相同的(或者我遗漏了什么)。下面是来自这两台机器的服务器变量以及加密函数。

这是我们必须接受的事情,还是我能做些什么来“正确地处理它”(因为没有一个更好的词)。我担心,在未来,这会咬我,并怀疑它是否可以避免。

编辑1:从my_rc4_encrypted_data.getBytes()返回的输出: dev-1:

代码语言:javascript
复制
Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60

发展-2:

代码语言:javascript
复制
Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60

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

DEV-1 (远程)

代码语言:javascript
复制
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 (局部)

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 15:14:09

利写道:

但是,请确保在测试中使用相同的编码,即String.getBytes(编码)(编辑),如果省略它,将使用jvm默认值。

利是对的- 铁路-1393在3.3.0.017中产生了一个与字符集编码相关的变化到toBase64,这介于您正在使用的3.3.2.002和3.2.2.000版本之间。

票数 2
EN

Stack Overflow用户

发布于 2013-01-14 17:31:03

据我所知,rc4加密输出在这两种情况下都是相同的(或者我遗漏了什么)。下面是来自这两台机器的服务器变量以及加密函数。

我建议将输出保存到两个文件中,然后比较文件大小,或者更好的是比较一个文件比较工具。Base64编码是将二进制数据转换为字符串数据的标准方法。

假设二进制文件与二进制文件完全相同,那么在两台服务器上都尝试将数据转换为基本64,然后再转换为二进制文件。我预测只有一台(或两台)服务器能够再次将数据转换回二进制文件。在这一点上,您应该知道是哪个服务器导致了您的问题,并且可以进一步研究。

如果它们都可以将基础64数据转换为二进制数据,并且在两个服务器上二进制数据都是正确的.嗯,我不确定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14287773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档