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.