6 Stimmen

Verschlüsselung / 3DES / CFB / Java und PHP

Ich habe einen PHP-Servor, der Daten in 3DES mit dem CFB-Modus entschlüsselt

Ich verschlüssele in PHP :

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

Dieses Skript in PHP ist mit anderen Systemen kompatibel.

Und ich möchte in Java verschlüsseln:

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;
    }
}

Ich habe nicht das gleiche Ergebnis in PHP und in Java

Wie ändert man die Java-Behandlung, um das gleiche Ergebnis wie mit PHP zu erzielen?

2voto

user1450740 Punkte 721

Die Antwort lautet:

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

Ich muss "CFB8" verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X