Cipher / 3DES / CFB / Java and PHP

I have a PHP server that decrypts data in 3DES with CFB mode

I am encrypting 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 fine with another 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 to change Java processing to get the same result as PHP?

+6
source share
1 answer

Answer:

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

I need to use "CFB8"

+2
source

Source: https://habr.com/ru/post/917862/


All Articles