JAVA开发经验(二):常用工具类1.4-加解密-3DES

摘要说明:

3DES:针对des算法进行了改进,有了三重des算法(DESede)。针对des算法的密钥长度较短以及迭代次数偏少问题做了相应改进,提高了安全强度。不过desede算法处理速度较慢,密钥计算时间较长,加密效率不高问题使得对称加密算法的发展不容乐观。

Maven依赖:

无,使用jdk默认即可

java工具类:

ThreeDESUtil主要包括有向量加解密方法;密钥的位数为24位:

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;

import com.sun.org.apache.xml.internal.security.utils.Base64;

/**
 * @模块名:taf
 * @包名:pers.cc.taf.encryption
 * @类名称: ThreeDESUtil
 * @类描述:【类描述】针对des算法进行了改进,有了三重des算法(DESede)。针对des算法的密钥长度较短以及迭代次数偏少问题做了相应改进,提高了安全强度。不过desede算法处理速度较慢,密钥计算时间较长,加密效率不高问题使得对称加密算法的发展不容乐观。
 * @版本:1.0
 * @创建人:cc
 * @创建时间:2018年8月24日上午10:04:40
 */

public class ThreeDESUtil {
    /**
     * 定义 加密算法,可用 DES,DESede,Blowfish
     */
    private static final String Algorithm = "DESede";

    /**
     * 算法/模式/补码方式
     */
    public static final String ALGORITHM_DES = "DESede/CBC/PKCS5Padding";

    // 加解密统一使用的编码方式
    private final static String ENCODING = "utf-8";

    /**
     * 
     * @方法名:encrypt 3des加密
     * @方法描述【方法功能描述】
     * @param data 明文
     * @param keystr 密钥
     * @param iv 向量
     * @return 加密后密文
     * @throws Exception
     * @修改描述【修改描述】
     * @版本:1.0
     * @创建人:cc
     * @创建时间:2018年8月27日 上午9:52:19
     * @修改人:cc
     * @修改时间:2018年8月27日 上午9:52:19
     */
    public static String encrypt(String data, String keystr, String iv) throws Exception {
        Key deskey = null;
        DESedeKeySpec spec = new DESedeKeySpec(keystr.getBytes(ENCODING));
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance(Algorithm);
        deskey = keyfactory.generateSecret(spec);

        Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
        IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
        byte[] encryptData = cipher.doFinal(data.getBytes());
        return Base64.encode(encryptData);
    }

    /**
     * 
     * @方法名:decrypt 3des解密
     * @方法描述【方法功能描述】
     * @param data 密文
     * @param keystr 密钥
     * @param iv 向量
     * @return 加密后明文
     * @throws Exception
     * @修改描述【修改描述】
     * @版本:1.0
     * @创建人:cc
     * @创建时间:2018年8月27日 上午9:53:16
     * @修改人:cc
     * @修改时间:2018年8月27日 上午9:53:16
     */
    public static String decrypt(String data, String keystr, String iv) throws Exception {
        Key deskey = null;
        DESedeKeySpec spec = new DESedeKeySpec(keystr.getBytes());
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance(Algorithm);
        deskey = keyfactory.generateSecret(spec);
        Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
        IvParameterSpec ips = new IvParameterSpec(iv.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
        byte[] decryptData = cipher.doFinal(Base64.decode(data));
        return new String(decryptData, ENCODING);
    }

    public static void main(String[] args) throws Exception {
        System.out.println(ThreeDESUtil.encrypt("cc", "123456788765432112345678", "01234567"));
        System.out.println(ThreeDESUtil.decrypt("+TFTNLC5gvg=", "123456788765432112345678", "01234567"));
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值