Un-encrypting / re-encrypting зашифрованная ColdFusion строка в PHP

Я в незавидном положении, где мне нужно поддерживать функциональность с помощью существующего приложения ColdFusion. В рамках процесса входа в систему приложение Coldfusion хранит файл cookie с зашифрованной строкой.

encrypt(strToEncrypt, theKey, "AES", "Base64") 

Я могу успешно расшифровать эту строку в PHP с помощью MCrypt и следующий код

 mcrypt_decrypt( MCRYPT_RIJNDAEL_128, base64_decode($theKey), base64_decode($encrypted_string), MCRYPT_MODE_ECB, "0000000000000000") 

Теперь мне нужно выполнить одно и то же шифрование в PHP, чтобы приложение ColdFusion могло получить доступ к данным в файле cookie.

На данный момент у меня есть

 mcrypt_encrypt( MCRYPT_RIJNDAEL_128, base64_decode($theKey), $strToEncrypt, MCRYPT_MODE_ECB, "0000000000000000"); 

Это, однако, несовместимо с эквивалентным алгоритмом шифрования ColdFusion

 decrypt(strToDecrypt, theKey, "AES", "Base64") 

Выбрасывание Given final block not properly padded исправлено.

Любая помощь очень ценится.

Джеймс

Не знаю, насколько это поможет, но у меня были следующие работы. Я думаю, чтобы сделать CF счастливым, что вам нужно наложить свое шифрование на определенную длину

Шифрование в CF

 Encrypt(data, encKey, 'AES/CBC/PKCS5Padding', encoding, encIv) 

Расшифровать в PHP

 function Decode($data, $encKey, $encIv, $format = 'uu') { if ($format === 'uu') { $data = Convert_uudecode($data); } else if ($format === 'hex') { $data = Pack('H*', $data); } else if ($format === 'base64') { $data = Base64_Decode($data); } else if ($format === 'url') { $data = UrlDecode($data); } $data = MCrypt_decrypt(MCRYPT_RIJNDAEL_128, $encKey, $data, 'cbc', $encIv); $pad = Ord($data{strlen($data)-1}); if ($pad > strlen($data)) return $data; if (strspn($data, chr($pad), strlen($data) - $pad) != $pad) return $data; return substr($data, 0, -1 * $pad); } 

Шифрование в PHP

 function Encode($data, $encKey, $encIv, $format = 'uu') { $pad = 16 - (StrLen($data) % 16); if ($pad > 0) { $data .= Str_repeat(Chr($pad), $pad); } $data = MCrypt_encrypt(MCRYPT_RIJNDAEL_128, $encKey, $data, 'cbc', $encIv); if ($format === 'uu') { return Convert_uuencode($data); } else if ($format === 'hex') { return Bin2Hex($data); } else if ($format === 'base64') { return Base64_Encode($data); } else if ($format === 'url') { return UrlEncode($data); } } 

Расшифровывать в CF

 Decrypt(data, encKey, 'AES/CBC/PKCS5Padding', encoding, encIv) 

По какой-то причине, что я не могу вспомнить, я предпочитал «uu» для кодирования.