(troppo lungo per i commenti)
Artjom B. already provided the answer above. Artjom B. ha scritto
Il problema è il riempimento. L'estensione mcrypt di PHP utilizza solo ZeroPadding in cui [...] è necessario eseguire il pad in testo in php [...] o utilizzare un codice diverso in ColdFusion come "DES/ECB/NoPadding". I consiglia il primo, perché se si utilizza NoPadding, il testo in chiaro deve essere già un multiplo della dimensione del blocco.
Sfortunatamente, è difficile produrre uno null character in CF. AFAIK, l'unica tecnica che funziona è use URLDecode("%00")
. Se non riesci a modificare il codice PHP come suggerito da @Artjom B., puoi provare a utilizzare la funzione seguente per inserire il testo in CF.Disclaimer: è solo leggermente testato (CF10), ma sembra produrre lo stesso risultato di cui sopra.
Aggiornamento: Poiché la funzione CF cifrare() always interprets the plain text input as a UTF-8 string, è anche possibile utilizzare charsetEncode(bytes, "utf-8") per creare un carattere nullo da un singolo array elemento byte, cioècharsetEncode(javacast("byte[]", [0]), "utf-8")
Esempio:
Valor = nullPad("TESTE", 8);
Key = "[email protected]";
result = Encrypt(Valor, ToBase64(Key), "DES/ECB/NoPadding", "BASE64");
// Result: TzwRx5Bxoa0=
WriteDump("Encrypted Text = "& Result);
Funzione:
/*
Pads a string, with null bytes, to a multiple of the given block size
@param plainText - string to pad
@param blockSize - pad string so it is a multiple of this size
@param encoding - charset encoding of text
*/
string function nullPad(string plainText, numeric blockSize, string encoding="UTF-8")
{
local.newText = arguments.plainText;
local.bytes = charsetDecode(arguments.plainText, arguments.encoding);
local.remain = arrayLen(local.bytes) % arguments.blockSize;
if (local.remain neq 0)
{
local.padSize = arguments.blockSize - local.remain;
local.newText &= repeatString(urlDecode("%00"), local.padSize);
}
return local.newText;
}
Personal, ora ha funzionato perfettamente nel test iniziale, farò diversi test più tardi, ma credo che la soluzione sia la stessa. Grazie per l'aiuto e prontezza. Mi ha aiutato molto. Grazie –
ArtjomB. capito il vero problema, ma felice quanto sopra aiutato :) – Leigh
Naturalmente, i due hanno aiutato molto =] –