3DES 加密
3DES 加密工具
·
import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import java.security.Key; /** * 3DES 加密 * * 密钥secretKey说明 * java中只提供了3倍长3des的算法,也就是secretKey的长度必须是24字节, * 如果想要使用2倍长3des,需要自己将后8个字节补全(就是将16个字节的前8个字节补到最后,变成24字节)。 * 如果提供的secretKey不足24字节,将会报错,如果超过24字节,将会截取前24字节作为secretKey */ public class DES3Util { private final static String iv = "ac1rm9cp"; // 加解密统一使用的编码方式 private final static String encoding = "UTF-8"; /** * 3DES 加密数据 * * @param plainText * 加密明文 * @param secretKey * 密钥 * @return 加密后的密文 * @throws Exception */ public static String encode(String plainText, String secretKey) throws ArithmeticException{ try { return executeEncode(plainText, secretKey); } catch (Exception e) { throw new ArithmeticException("数据加解密异常,请找加密类提供方!异常信息:" + e.getMessage()); } } public static String executeEncode(String plainText, String secretKey) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes()); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("DESede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, deskey, ips); byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding)); return new String(Base64.encodeBase64(encryptData),encoding); } /** * 3DES 解密数据 * * @param encryptText * 解密密文 * @param secretKey * 密钥 * @return 解密后的明文 * @throws Exception */ public static String decode(String encryptText, String secretKey)throws ArithmeticException{ try { return executeDecode(encryptText, secretKey); } catch (Exception e) { throw new ArithmeticException("数据加解密异常,请找加密类提供方!异常信息:" + e.getMessage()); } } private static String executeDecode(String encryptText, String secretKey)throws Exception{ Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes()); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("DESede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede/CBC/NoPadding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, deskey, ips); byte[] decryptData = cipher.doFinal(Base64.decodeBase64(encryptText.getBytes(encoding))); return new String(decryptData, encoding).trim(); } public static void main(String[] args) { String secretKey = "69d1GwTn4XU6GWEfK8fAA6e8nn"; String encode = encode("墙上画凤凰,凤凰画在粉红墙。红凤凰、粉凤凰,红粉凤凰、花凤凰。红凤凰,黄凤凰,红粉凤凰,粉红凤凰,花粉花凤凰。",secretKey); System.out.println("加密明文:=====================》"+encode); System.out.println("/t/t========解密:========="); String decode = decode(encode,secretKey); System.out.println("解密明文:=====================》"+decode); } }
更多推荐
已为社区贡献1条内容
所有评论(0)