Un-Verschlüsselungs- / Wieder Verschlüsselung eines verschlüsselten String Coldfusion in PHP

StackOverflow https://stackoverflow.com/questions/3196846

Frage

Ich bin in der wenig beneidenswerten Position, wo ich Funktionalität mit einer vorhandenen Coldfusion-Anwendung zu erhalten. Im Rahmen Login-Prozess von ihm ist die Coldfusion App speichert ein Cookie mit einem verschlüsselten String zurück.

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

Ich kann erfolgreich diese Zeichenfolge in PHP MCrypt entschlüsseln und den folgenden Code

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

ich jetzt die Notwendigkeit, die gleiche Verschlüsselung innerhalb PHP so auszuführen, dass der Coldfusion-App die Daten im Cookie zugreifen kann.

Im Moment, was ich habe, ist

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

Dies ist jedoch nicht kompatibel mit dem Äquivalent von Coldfusion-Verschlüsselungsalgorithmus

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

Werfen eines Given final block not properly padded Fehler.

Jede Hilfe sehr geschätzt.

James

War es hilfreich?

Lösung

Sie wissen nicht, wie viel Hilfe dieser sein wird, aber ich habe folgenden Arbeits hat. Ich denke, CF gerne Pad Ihre Verschlüsselung auf eine bestimmte Länge haben, um

Verschlüsseln in CF

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

Entschlüsseln in 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); 
}

Verschlüsseln in 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);
    }
}

Entschlüsseln in CF

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

Aus irgendeinem Grund, dass ich mich nicht erinnern kann, ich begünstigt ‚uu‘ für die Codierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top