import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.io.IOException; import java.security.MessageDigest; import java.security.SecureRandom; import java.util.Base64; public class EnDeCryptUtil { private final static String DES = "DES"; /** * 根据键值进行加密 * @param data * @param key 加密键byte数组 * @return * @throws Exception */ public static String encrypt(String data, String key, int size) throws Exception { byte[] bt = encrypt(data.getBytes("UTF-8"), key.getBytes(), size); String strs = Base64.getEncoder().encodeToString(bt); return strs; } /** * 根据键值进行解密 * @param data * @param key 加密键byte数组 * @return * @throws IOException * @throws Exception */ public static String decrypt(String data, String key, int size) throws IOException, Exception { if (data == null) return null; byte[] buf = Base64.getDecoder().decode(data.replace("\r\n", "")); byte[] bt = decrypt(buf,key.getBytes(),size); return new String(new String(bt).getBytes(),"UTF-8"); } /** * 根据键值进行加密 * @param data * @param key 加密键byte数组 * @return * @throws Exception */ private static byte[] encrypt(byte[] data, byte[] key, int size) throws Exception { // 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密钥数据创建DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key,size); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(DES); // 用密钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); return cipher.doFinal(data); } /** * 根据键值进行解密 * @param data * @param key 加密键byte数组 * @return * @throws Exception */ private static byte[] decrypt(byte[] data, byte[] key, int size) throws Exception { // 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密钥数据创建DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key,size); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance(DES); // 用密钥初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey, sr); return cipher.doFinal(data); } /** * MD5 32位加密 * * @param encryptStr * @return String */ public static String encrypt32(String encryptStr) { char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; try { byte[] btInput = encryptStr.getBytes(); // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字节更新摘要 mdInst.update(btInput); // 获得密文 byte[] md = mdInst.digest(); // 把密文转换成十六进制的字符串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str).toUpperCase(); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) throws Exception { String data = "{test:\"test\",Sys:\"01\",Name:\"压缩\",sex:\"boy\",tel:\"13800138000\",Desc:\"哈塞给\"}"; String key = "secret1234";//秘钥 必须8位以上 System.out.println(key.getBytes().length); String encode = encrypt(data, key, 0); System.out.println(encode); String dcode = decrypt(encode, key, 0); System.out.println(dcode); } }
加解密工具
最新推荐文章于 2024-09-12 17:42:42 发布