Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cipher / 3DES / CFB / Java and PHP

I have a PHP servor which decrypt data in 3DES with the CFB Mode

I encrypt in PHP :

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

This script in PHP is OK with other system.

And I want to encrypt in 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;
    }
}

I have not the same result in PHP and in Java

How modify Java treatment to obtain the same result as PHP?

like image 919
user1450740 Avatar asked Jun 12 '12 08:06

user1450740


1 Answers

The answer is:

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

I need to use "CFB8"

like image 146
user1450740 Avatar answered Sep 19 '22 11:09

user1450740