FINAL EDIT: SOLVATO, l'aggiornamento di dev locale su railo 3.3.4.003 ha risolto il problema.Output diverso da toBase64() in CFML su 2 macchine diverse
devo RC4 crittografare alcune stringhe e li hanno base64 e sto correndo in una situazione in cui lo stesso ingresso genererà uscite differenti su 2 differenti configurazioni dev.
Per esempio, se ho una stringa di [email protected]
su una macchina (DEV-1) Prendo: DunU+ucIPz/Z7Ar+HTw=
e dall'altra (DEV-2) sarà: DunU+ucIlZfZ7Ar+HTw=
In primo luogo, sono rc4 che lo crittografa attraverso un function found here. Successivo Sto alimentando a: toBase64(my_rc4_encrypted_data, "iso-8859-1")
Per quanto posso dire l'output di crittografia rc4 è lo stesso su entrambi (o mi manca qualcosa). Di seguito sono riportate le variabili SERVER di entrambe le macchine e la funzione di crittografia.
È qualcosa con cui dobbiamo semplicemente convivere o c'è qualcosa che posso fare per "gestirlo correttamente" (per la mancanza di una parola migliore). Sono preoccupato che in futuro questo mi morde e mi chiedo che possa essere evitato.
Edit 1: uscita da my_rc4_encrypted_data.getBytes() restituisce: 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
(nessuna codifica passato alla getBytes()
)
DEV-1 (remoto)
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 (locale) la funzione
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;
}
Solo per motivi di test, è possibile passare entrambi in esecuzione sulla stessa versione JVM e vedere se questo fa la differenza. È una variabile facile da eliminare. Il prossimo sarebbe provare la stessa versione di Railo, nel caso ci sia un diff lì. –
Sembra strano. La funzione RC4 dovrebbe fornire lo stesso output dato lo stesso input. Vorrei provare Base64 codificare qualcosa di semplice su entrambe le macchine. Vedo che hai diverse architetture e Base64 codifica la rappresentazione binaria in una stringa quindi non so se questo potrebbe causare una differenza –
Ha senso, ma sfortunatamente è fuori dalla mia "giurisdizione". Il meglio che potrò fare è dare un calcio alla "catena di comando". – vector