mcrypt blowfish php resultados ligeramente diferentes en comparación con java y .net

Aquí hay un código de ejemplo con valores clave modificados y carga útil:

$key = '/4rTInjwg/H/nA==';
$key = base64_decode($key);

$data = 'val=100|val=200|val=300|val=400|val=500|val=600|val=700|val=800|val=900|';
$data.= 'val2=100|val2=200|val2=300|val2=400|val2=500|val2=600|val2=700|val2=800|val2=900|';
$data.= 'val3=100|val3=200|val3=300|val3=400|val3=500|val3=600|val3=700|val3=800|val3=900|';
$data.= 'val4=100|val4=200|val4=300|val4=400|val4=500|val4=600|val4=700|val4=800|val4=900|';

$result = base64_encode(mcrypt_ecb(MCRYPT_BLOWFISH,$key, $data, MCRYPT_ENCRYPT));

Esto cifra y descifra bien en PHP, pero Java y .NET presentan valores diferentes, y lo que es peor, no puedo descifrar los resultados de Java o .NET. Cuando intento descifrar los valores de Java, obtengo una cadena que comienza bien, pero termina siendo basura a la mitad. Estoy trabajando en 5.3x en Windows XP en caso de que alguien se lo pregunte.

Si bien STFW, he notado varios hilos en los que los últimos comentarios mencionan cosas sobre la base64 desordenando el resultado debido a problemas de tipeo, y me pregunto si eso es lo que está sucediendo porque los resultados se acercan tanto, los primeros 50 caracteres coinciden , entonces las cosas van a @ # $ !.

También he leído varios hilos sobre el tamaño del bloque y el relleno, pero nadie parece estar de acuerdo sobre cuál debería ser el relleno. Realmente necesito saber si Java está rellenando el texto, cuál es el tamaño de bloque predeterminado, cuál sería el pad? Vea abajo:

El desarrollador de Java está haciendo:

    import org.apache.commons.codec.binary.Base64;
    import java.util.ResourceBundle;
    import com.sun.crypto.provider.SunJCE;

    ... snip ...

    StringBuffer ourTransferBuffer = new StringBuffer(s);
    byte abyte0[] = Base64.decodeBase64(encryptionKey);
    SunJCE sunjce = new SunJCE();
    Security.addProvider(sunjce);
    SecretKeySpec secretkeyspec = new SecretKeySpec(abyte0, "Blowfish");
    Cipher cipher = Cipher.getInstance("Blowfish");
    cipher.init(1, secretkeyspec);
    byte abyte1[] = cipher.doFinal(ourTransferBuffer.toString().getBytes());
    s = Base64.encodeBase64String(abyte1);
    return s;

    ... snip ...

Ya he gastado demasiado tiempo en esto, ¿alguien tiene alguna idea aquí? Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta