• Java实现3DES加密解密(DESede/ECB/PKCS5Padding使用)


    一、简介

    3DES(又叫Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。

    它相当于是对每个数据块应用三次DES加密算法。密钥长度是128位,192位(bit),如果密码位数少于等于64位,加密结果与DES相同。

    原版DES容易被破解,新的3DES出现,增加了加密安全性,避免被暴力破解。它同样是对称性加密,同样涉及到加密编码方式,及填充方式。包括3DES-ECB,3DES-CBC,3DES-CTR,3DES-OFB,3DES-CFB。

    实现

    这里采用3DES来实现加密解密。

    加密模式:ECB
    填充:PKCS5Padding
    输出:base64
    字符集:utf8编码

    3DES加密解密在线工具类:http://tool.chacuo.net/crypt3des
    在这里插入图片描述
    3DES加密、解密工具类:

    package com.hwariot.device.util;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import java.util.Base64;
    
    /**
     * 3DES加密工具类
     * @author qzz
     */
    public class ThreeDESUtils {
    
        /**
         * 加解密统一编码方式
         */
        private final static String ENCODING = "utf-8";
    
        /**
         * 加解密方式
         */
        private final static String ALGORITHM  = "DESede";
    
        /**
         *加密模式及填充方式
         */
        private final static String PATTERN = "DESede/ECB/pkcs5padding";
    
        /**
         * 3DES加密
         *
         * @param plainText 普通文本
         * @param sK 秘钥(24位密码)
         * @return
         * @throws Exception
         */
        public static String encode(String plainText,String sK) throws Exception {
            SecretKey secretKey = new SecretKeySpec(sK.getBytes(ENCODING), ALGORITHM);
            // 3DES加密采用pkcs5padding填充
            Cipher cipher = Cipher.getInstance(PATTERN);
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            // 执行加密操作
            byte[] encryptData = cipher.doFinal(plainText.getBytes(ENCODING));
            return Base64.getEncoder().encodeToString(encryptData);
        }
    
        /**
         * 3DES解密
         *
         * @param encryptText 加密文本
         * @return
         * @throws Exception
         */
        public static String decode(String encryptText, String sK) throws Exception {
            SecretKey secretKey = new SecretKeySpec(sK.getBytes(ENCODING), ALGORITHM);
            // 3DES加密采用pkcs5padding填充
            Cipher cipher = Cipher.getInstance(PATTERN);
    
            // 用密匙初始化Cipher对象
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            // 正式执行解密操作
            byte[] decryptData = cipher.doFinal(Base64.getDecoder().decode(encryptText));
            return new String(decryptData, ENCODING);
        }
    
        public static void main(String[] args) throws Exception {
            //加密
            System.out.println(encode("test-111","111036369260679051122113"));
            
            //解密
            System.out.println(decode("BGL351OzferfAc2gm9lMcf2R2ZR6A1KvefEXoTQmybE=","111036369260679051122113"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    注意:sK 秘钥:为24位随机数。只有确保加解码sk一致即可。

    测试效果:
    在这里插入图片描述

  • 相关阅读:
    机器学习策略篇:详解正交化(Orthogonalization)
    当我给女同学用python画了个圣诞树后……
    内网渗透之Socks代理简介
    红外避障模块介绍
    R语言时间序列数据提取:使用xts包的first函数提取时间序列中最前面两周的数据(first 2 week)
    第五章 将对象映射到 XML - 指定映射 XML 文档的格式选项
    小程序自定义导航栏使用整理
    uniapp上下滑屏切换支持视频和图片轮播实现,类似抖音效果
    string
    Centos Discuz!论坛系统
  • 原文地址:https://blog.csdn.net/qq_26383975/article/details/128112542