(Слишком долго для комментариев)
Artjom B. уже предоставил ответ выше. Артём Б. написал
Проблема в прокладке. Расширение PHP mcrypt использует только ZeroPadding [...], вам нужно либо дополнить открытый текст в php [...], либо использовать другой шифр в ColdFusion, например «DES/ECB/NoPadding». Я рекомендую первое, потому что если вы используете NoPadding, открытый текст уже должен быть кратен размеру блока.
К сожалению, в CF сложно создать нулевой символ. Насколько я знаю, единственный работающий метод - использовать URLDecode("%00")
. Если вы не можете изменить код PHP, как предложил @Artjom B., вы можете попробовать использовать функцию ниже, чтобы дополнить текст в CF. Отказ от ответственности: он только слегка протестирован (CF10), но, похоже, дал тот же результат, что и выше.
Обновление: поскольку функция CF encrypt() всегда интерпретирует ввод простого текста как строку UTF-8, вы также можете использовать charsetEncode(bytes, "utf-8") для создания нулевого символа из массива байтов с одним элементом, т.е. /эм> charsetEncode( javacast("byte[]", [0] ), "utf-8")
Пример:
Valor = nullPad("TESTE", 8);
Key = "$224455@";
result = Encrypt(Valor, ToBase64(Key), "DES/ECB/NoPadding", "BASE64");
// Result: TzwRx5Bxoa0=
WriteDump( "Encrypted Text = "& Result );
Функция:
/*
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;
}
person
Leigh
schedule
08.03.2015