ENDBEARBEITUNG: Gelöste, Upgrade lokalen dev auf Railo 3.3.4.003 löste das Problem.Unterschiedliche Ausgabe von toBase64() in CFML auf 2 verschiedenen Maschinen
Ich muss RC4 verschlüsseln einige Saiten und sie Base64 codiert, und ich bin in einer Situation ausgeführt wird, wo die gleiche Eingangs verschiedene Ausgänge auf 2 verschiedenen Entwickler-Setups generieren.
Zum Beispiel, wenn ich eine Zeichenfolge [email protected]
Auf einer Maschine (DEV-1) habe, werde ich bekommen: DunU+ucIPz/Z7Ar+HTw=
und auf der anderen Seite (DEV-2) es wird sein: DunU+ucIlZfZ7Ar+HTw=
Zuerst bin ich rc4 verschlüsselt es durch eine function found here. Weiter füttere ich es: toBase64(my_rc4_encrypted_data, "iso-8859-1")
Soweit ich feststellen kann, ist die rc4-Verschlüsselung Ausgabe auf beiden gleich (oder ich vermisse etwas). Unten sind SERVER-Variablen von beiden Maschinen sowie die Verschlüsselungsfunktion.
Ist das etwas, mit dem wir einfach leben müssen oder gibt es etwas, was ich tun kann, um es "richtig zu handhaben" (für das Fehlen eines besseren Wortes). Ich bin besorgt, dass in der Zukunft wird mich das beißen und wundern, dass es abgewendet werden kann.
bearbeiten 1: Output von my_rc4_encrypted_data.getBytes() gibt: 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
(keine Codierung übergeben getBytes()
)
DEV-1 (entfernt)
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 (lokale)
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-Funktion:
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;
}
Nur um zu testen, können Sie sie beide auf die gleiche JVM-Version ausführen, und sehen, ob das einen Unterschied macht. Es ist eine einfache Variable zu eliminieren. Als nächstes wäre es, die gleiche Version von Railo anzuprobieren, falls es einen Unterschied gibt. –
Scheint seltsam. Die RC4-Funktion sollte bei gleicher Eingabe die gleiche Ausgabe liefern. Ich würde versuchen Base64 für etwas Einfaches auf beiden Rechnern zu kodieren. Ich sehe, Sie haben unterschiedliche Architekturen und Base64 codiert die binäre Darstellung in eine Zeichenfolge, so dass ich nicht weiß, ob das einen Unterschied verursachen könnte. –
Macht Sinn, aber das ist leider außerhalb meiner "Zuständigkeit". Das Beste, was ich tun kann, ist die "Befehlskette". – vector