DESedeUtil.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package com.crm.rely.backend.util;
  2. import javax.crypto.Cipher;
  3. import javax.crypto.SecretKey;
  4. import javax.crypto.spec.IvParameterSpec;
  5. import javax.crypto.spec.SecretKeySpec;
  6. public class DESedeUtil {
  7. private static final String ENCODING_UTF_8 = "utf8";
  8. private static final String DESEDE_ALGORITHM = "DESede";
  9. private static final String DESEDE_CBC_PKCS5PEADDING_ALGORITHM = "DESede/CBC/PKCS5Padding";
  10. public static String encrypt(String message, String secretKey) throws Exception {
  11. return encrypt(message, secretKey, ENCODING_UTF_8);
  12. }
  13. public static String encrypt(String message, String secretKey, String encoding) throws Exception {
  14. byte[] secretKeyBytes = secretKey.getBytes(encoding);
  15. byte[] keyBytes = secretKey.substring(0, 8).getBytes(encoding);
  16. final SecretKey key = new SecretKeySpec(secretKeyBytes, DESEDE_ALGORITHM);
  17. final IvParameterSpec iv = new IvParameterSpec(keyBytes);
  18. final Cipher cipher = Cipher.getInstance(DESEDE_CBC_PKCS5PEADDING_ALGORITHM);
  19. cipher.init(Cipher.ENCRYPT_MODE, key, iv);
  20. final byte[] plainTextBytes = message.getBytes(encoding);
  21. final byte[] cipherText = cipher.doFinal(plainTextBytes);
  22. return bytes2HexString(cipherText);
  23. }
  24. public static String bytes2HexString(byte[] b) {
  25. byte[] hex = "0123456789ABCDEF".getBytes();
  26. byte[] buff = new byte[2 * b.length];
  27. for (int i = 0; i < b.length; i++) {
  28. buff[2 * i] = hex[(b[i] >> 4) & 0x0f];
  29. buff[2 * i + 1] = hex[b[i] & 0x0f];
  30. }
  31. return new String(buff);
  32. }
  33. public static byte[] hexStringToBytes(String s) {
  34. int len = s.length();
  35. byte[] data = new byte[len / 2];
  36. for (int i = 0; i < len; i += 2) {
  37. data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
  38. }
  39. return data;
  40. }
  41. public static String decrypt(String message, String secretKey) throws Exception {
  42. return decrypt(message, secretKey, ENCODING_UTF_8);
  43. }
  44. public static String decrypt(String message, String secretKey, String encoding) throws Exception {
  45. byte[] messageBytes = hexStringToBytes(message);
  46. byte[] secretKeyBytes = secretKey.getBytes(encoding);
  47. byte[] keyBytes = secretKey.substring(0, 8).getBytes(encoding);
  48. final SecretKey key = new SecretKeySpec(secretKeyBytes, DESEDE_ALGORITHM);
  49. final IvParameterSpec iv = new IvParameterSpec(keyBytes);
  50. final Cipher decipher = Cipher.getInstance(DESEDE_CBC_PKCS5PEADDING_ALGORITHM);
  51. decipher.init(Cipher.DECRYPT_MODE, key, iv);
  52. final byte[] plainText = decipher.doFinal(messageBytes);
  53. return new String(plainText, encoding);
  54. }
  55. }