DES encryption and decryption algorithm java version

Preface:

Work requirements: all parameters (database connection, server connection, can't use clear text to pass parameters), so an encryption and decryption algorithm is needed. Originally, we wanted to write AES, but in python environment, all kinds of changes and debugging are annoying, so we need to use DES in the second place; DES algorithm has written java version and python version. This is java version. Python can find it in my blog. python version

1. Code directly
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;


public class DesEnAndDe {

    public static String DES_CBC_Encrypt(String secretKey, String str) {
        try {
            byte[] keyBytes = secretKey.getBytes();
            byte[] content = str.getBytes();
            DESKeySpec keySpec = new DESKeySpec(keyBytes);
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey key = keyFactory.generateSecret(keySpec);

            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(keySpec.getKey()));
            byte[] result = cipher.doFinal(content);
            return byteToHexString(result);
        } catch (Exception e) {
            System.out.println("exception:" + e.toString());
        }
        return null;
    }

    public static String DES_CBC_Decrypt(String secretKey, String str) {
        try {
            byte[] keyBytes = secretKey.getBytes();
            byte[] content = hexToByteArray(str);
            DESKeySpec keySpec = new DESKeySpec(keyBytes);
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey key = keyFactory.generateSecret(keySpec);

            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(keyBytes));
            byte[] result = cipher.doFinal(content);
            return new String(result);
        } catch (Exception e) {
            System.out.println("exception:" + e.toString());
        }
        return null;
    }

    private static String byteToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length);
        String sTemp;
        for (byte aByte : bytes) {
            sTemp = Integer.toHexString(0xFF & aByte);
            if (sTemp.length() < 2)
                sb.append(0);
            sb.append(sTemp.toUpperCase());
        }
        return sb.toString();
    }

    private static byte[] hexToByteArray(String inHex) {
        int hexLen = inHex.length();
        byte[] result;
        if (hexLen % 2 == 1) {
            hexLen++;
            result = new byte[(hexLen / 2)];
            inHex = "0" + inHex;
        } else {
            result = new byte[(hexLen / 2)];
        }
        int j = 0;
        for (int i = 0; i < hexLen; i += 2) {
            result[j] = (byte) Integer.parseInt(inHex.substring(i, i + 2), 16);
            j++;
        }
        return result;
    }

    public static void main(String[] o) {
        String secretKey = "wo/**bhd"; // secret key
        String str = "xgsqrfyw1hr38*/-ff?"; // Encrypted content
        String secret_pwd = DesEnAndDe.DES_CBC_Encrypt(secretKey, str);
        System.out.println("Ciphertext:" + secret_pwd);
        String clear_pwd = DesEnAndDe.DES_CBC_Decrypt(secretKey, secret_pwd);
        System.out.println("Plaintext:" + clear_pwd);

    }

}

2. Result of running main function
Ciphertext: E2EEA3378DF26770E7D0BED76FAB4B2AF9F9886134706D56
 Clear text: xgsqrfyw1hr38*/-ff?
3.tips

The DES algorithm requires that the number of bits of the key must be 8.

Keywords: Python Java Database

Added by patrickng on Sat, 07 Dec 2019 07:13:37 +0200