ОКОНЧАТЕЛЬНЫЙ РЕДАКТИРОВАНИЕ: РЕШЕНЫЙ, модернизация локального разработчика на рельсо 3.3.4.003 разрешала проблему.Различные выходные данные от toBase64() в CFML на двух разных машинах
Я должен RC4 шифровать некоторые строки и иметь их в формате base64, и я бегу в ситуации, когда тот же вход будет генерировать различные выходы на 2-х разных Дев установок.
Например, если у меня есть строка [email protected]
На одной машине (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() возвращает: DEV-1:
Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60
DEV-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;
}
Только для тестирования вы можете переключить их как на одну версию JVM, так и на то, чтобы это изменилось. Это простая переменная, которую можно устранить. Следующим было бы попробовать ту же версию Railo, если там есть diff. –
Кажется странным. Функция RC4 должна обеспечивать один и тот же выход с одним и тем же входом. Я бы попробовал кодировку Base64 на обеих машинах. Я вижу, что у вас разные архитектуры, а Base64 кодирует двоичное представление в строку, поэтому я не знаю, может ли это вызвать разницу. –
Имеет смысл, но к сожалению, это из-за моей «юрисдикции». Лучшее, что я смогу сделать, это поднять «цепочку команд». – vector