初识3DES加密--快速应用

博客介绍了Java中DESede加密方式,包含加密模式ECB、CBC,填充模式PKCS5Padding、NoPadding等常用组合,如DESede/ECB/PKCS5Padding等。还提到加密密钥需24字节,适合快速使用,欢迎补充指正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.net.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * @author:gavin
 * @date:2019/7/11 19 18
 * @Description
 **/
public class ThreeDesUtil {

    private static final String Algorithm = "DESede/ECB/PKCS5Padding";
    private static final String chartName = "UTF-8";
    private static final String key = "thiskey";

    /**
     * 3DES加密 +base64
     *
     * @auther: gavin
     * @date: 2019/7/12 10:38
     * @param: [srcStr]
     * @return: java.lang.String
     */
    public static String encode3Des(String srcStr) {

        try {
            byte[] keybyte = hex(key);
            byte[] src = srcStr.getBytes(chartName);
            //            DESedeKeySpec dks = new DESedeKeySpec(keybyte);
            //            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
            //            SecretKey deskey = keyFactory.generateSecret(dks);
            SecretKey deskey = new SecretKeySpec(keybyte, "DESede");
            //加密
            Cipher c1 = Cipher.getInstance(Algorithm);
            c1.init(Cipher.ENCRYPT_MODE, deskey);
            String pwd = Base64.encodeBase64String(c1.doFinal(src));
            return pwd;
        } catch (java.security.NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        } catch (javax.crypto.NoSuchPaddingException e2) {
            e2.printStackTrace();
        } catch (java.lang.Exception e3) {
            e3.printStackTrace();
        }
        return null;
    }

    /**
     * 3DES解密
     * base + 3des
     *
     * @auther: gavin
     * @date: 2019/7/12 10:38
     * @param: [desStr]
     * @return: java.lang.String
     */
    public static String decode3Des(String desStr) {
        Base64 base64 = new Base64();
        byte[] src = base64.decode(desStr);
        try {
            byte[] keybyte = hex(key);
            //生成密钥
            //            DESedeKeySpec dks = new DESedeKeySpec(keybyte);
            //            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
            //            SecretKey deskey = keyFactory.generateSecret(dks);
            SecretKey deskey = new SecretKeySpec(keybyte, "DESede");
            //解密
            Cipher c1 = Cipher.getInstance(Algorithm);
            c1.init(Cipher.DECRYPT_MODE, deskey);
            String pwd = new String(c1.doFinal(src), chartName);
            return pwd;
        } catch (java.security.NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        } catch (javax.crypto.NoSuchPaddingException e2) {
            e2.printStackTrace();
        } catch (java.lang.Exception e3) {
            e3.printStackTrace();
        }
        return null;
    }

    /**
     * 生成24位key
     *
     * @auther: gavin
     * @date: 2019/7/12 11:24
     * @param: [key]
     * @return: byte[]
     */
    public static byte[] hex(String key) {
        String f = DigestUtils.md5Hex(key);
        byte[] bkeys = new String(f).getBytes();
        byte[] enk = new byte[24];
        for (int i = 0; i < 24; i++) {
            enk[i] = bkeys[i];
        }
        return enk;
    }

 

这里用的是:DESede/ECB/PKCS5Padding

  • DESede表示加密方式
  • ECB表示加密模式
  • PKCS5Padding表示填充模式

常用的有:

DESede/ECB/PKCS5Padding,

DESede/ECB/NoPadding,

DESede/CBC/PKCS5Padding,

DESede/CBC/NoPadding

注:

  1. key:需24字节
  2. 编码方式

初识记录,适合快速使用。欢迎各位大佬补充指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值