Cifrado / 3DES / CFB / Java y PHP

Tengo un servidor PHP que descifra datos en 3DES con el modo CFB

Lo encripto en PHP:

$montant = "500";
$message_crypte = mcrypt_encrypt(MCRYPT_3DES, "N4y1FRDRJ7wn7eJNnWaahCIS", $montant, ,CRYPT_MODE_CFB, "NCNPJDcR");
$montant = base64_encode($message_crypte);

Este script en PHP está bien con otro sistema.

Y quiero cifrar en Java:

public class CryptData {
    private KeySpec keySpec;
    private SecretKey key;
    private IvParameterSpec iv;

    public CryptData(String keyString, String ivString) {
        try {
            final MessageDigest md = MessageDigest.getInstance("md5");

            final byte[] digestOfPassword = md.digest(Base64
                    .decodeBase64(keyString.getBytes("ISO-8859-1")));

            final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
            for (int j = 0, k = 16; j < 8;) {
                keyBytes[k++] = keyBytes[j++];
            }

            //keySpec = new DESedeKeySpec(keyBytes);
            keySpec = new DESedeKeySpec(keyString.getBytes());

            key = SecretKeyFactory.getInstance("DESede")
                    .generateSecret(keySpec);

            iv = new IvParameterSpec(ivString.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String encrypt(String value) {
        try {
            Cipher ecipher = Cipher.getInstance("DESede/CFB/NoPadding");

                    //"SunJCE");
            ecipher.init(Cipher.ENCRYPT_MODE, key, iv);

            if (value == null)
                return null;

            // Encode the string into bytes using utf-8
            byte[] valeur = value.getBytes("ISO-8859-1");
            //byte[] utf8 = value.getBytes();

            // Encrypt
            byte[] enc = ecipher.doFinal(valeur);

            // Encode bytes to base64 to get a string
            return new String(Base64.encodeBase64(enc), "ISO-8859-1");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

No tengo el mismo resultado en PHP y en Java

¿Cómo modificar el tratamiento de Java para obtener el mismo resultado que PHP?

preguntado el 12 de junio de 12 a las 09:06

Parece que su PHP no está realizando ningún relleno PKCS # 5: ¿se omitió eso de su muestra aquí o no se está realizando ningún relleno en el lado de PHP? -

Mi script PHP ya está funcionando con otros sitios en PHP o ASP o C#, por lo que no cambiaría el código, sino en Java. ¿Tienes una idea? Probé con NoPadding, pero tampoco funciona... -

Este podría ser solo yo, pero para mí parece que no está codificando en base64 en el script PHP, por lo que si lo decodifica en el otro extremo, ¿se leerá como un puro galimatías? -

@ user1450740 responda la pregunta para que otros puedan ver que tenemos una solución aquí. -

@ user1450740 Elija el enlace "Responda su pregunta" en la parte inferior de la página, publique su respuesta y luego selecciónela como la respuesta. Esto lo eliminará de la página sin respuesta. -

1 Respuestas

La respuesta es:

Cipher ecipher = Cipher.getInstance("DESede/CFB8/NoPadding");

Necesito usar "CFB8"

Respondido 11 Abr '19, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.