| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package com.crm.rely.backend.util;
- import javax.crypto.Cipher;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.IvParameterSpec;
- import javax.crypto.spec.SecretKeySpec;
- public class DESedeUtil {
- private static final String ENCODING_UTF_8 = "utf8";
- private static final String DESEDE_ALGORITHM = "DESede";
- private static final String DESEDE_CBC_PKCS5PEADDING_ALGORITHM = "DESede/CBC/PKCS5Padding";
- public static String encrypt(String message, String secretKey) throws Exception {
- return encrypt(message, secretKey, ENCODING_UTF_8);
- }
- public static String encrypt(String message, String secretKey, String encoding) throws Exception {
- byte[] secretKeyBytes = secretKey.getBytes(encoding);
- byte[] keyBytes = secretKey.substring(0, 8).getBytes(encoding);
- final SecretKey key = new SecretKeySpec(secretKeyBytes, DESEDE_ALGORITHM);
- final IvParameterSpec iv = new IvParameterSpec(keyBytes);
- final Cipher cipher = Cipher.getInstance(DESEDE_CBC_PKCS5PEADDING_ALGORITHM);
- cipher.init(Cipher.ENCRYPT_MODE, key, iv);
- final byte[] plainTextBytes = message.getBytes(encoding);
- final byte[] cipherText = cipher.doFinal(plainTextBytes);
- return bytes2HexString(cipherText);
- }
- public static String bytes2HexString(byte[] b) {
- byte[] hex = "0123456789ABCDEF".getBytes();
- byte[] buff = new byte[2 * b.length];
- for (int i = 0; i < b.length; i++) {
- buff[2 * i] = hex[(b[i] >> 4) & 0x0f];
- buff[2 * i + 1] = hex[b[i] & 0x0f];
- }
- return new String(buff);
- }
- public static byte[] hexStringToBytes(String s) {
- int len = s.length();
- byte[] data = new byte[len / 2];
- for (int i = 0; i < len; i += 2) {
- data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
- }
- return data;
- }
- public static String decrypt(String message, String secretKey) throws Exception {
- return decrypt(message, secretKey, ENCODING_UTF_8);
- }
- public static String decrypt(String message, String secretKey, String encoding) throws Exception {
- byte[] messageBytes = hexStringToBytes(message);
- byte[] secretKeyBytes = secretKey.getBytes(encoding);
- byte[] keyBytes = secretKey.substring(0, 8).getBytes(encoding);
- final SecretKey key = new SecretKeySpec(secretKeyBytes, DESEDE_ALGORITHM);
- final IvParameterSpec iv = new IvParameterSpec(keyBytes);
- final Cipher decipher = Cipher.getInstance(DESEDE_CBC_PKCS5PEADDING_ALGORITHM);
- decipher.init(Cipher.DECRYPT_MODE, key, iv);
- final byte[] plainText = decipher.doFinal(messageBytes);
- return new String(plainText, encoding);
- }
- }
|