首页 > 编程语言 >JAVA工具类-DES加密解密

JAVA工具类-DES加密解密

时间:2022-09-20 14:56:38浏览次数:105  
标签:JAVA DESKeySpec DES 解密 Cipher key new 加密

import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;

/**
 * @ClassName : DesEncryptUtil
 * @Date: 2021/4/8 13:20
 * @Description : 使用DES算法的加密、解密工具
 */
@Slf4j
public class DesEncryptUtil {
    /**
     * @return 加密后的字符串的base64格式
     * @Description: 加密
     * @Param sourceStr 原始未加密明文 key 密钥,长度必须大于等于8位
     * @Date: 2021/4/8 13:24
     **/
    public static String encryptDesToBase64(String sourceStr, String key) {
        try {
            if (sourceStr == null || sourceStr.isEmpty()) {
                throw new Exception("原文不能为空!");
            }
            if (key == null || key.isEmpty() || key.length() < 8) {
                throw new Exception("密钥不能为空,且密钥必须大于等于8位!");
            }
            byte[] datasource = sourceStr.getBytes("utf-8");
            SecureRandom random = new SecureRandom();
            DESKeySpec desKey = new DESKeySpec(key.getBytes("utf-8"));

            //创建一个密匙工厂,然后用它把DESKeySpec转换成
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey securekey = keyFactory.generateSecret(desKey);

            //Cipher对象实际完成加密操作
            Cipher cipher = Cipher.getInstance("DES");

            //用密匙初始化Cipher对象,ENCRYPT_MODE用于将 Cipher 初始化为加密模式的常量
            cipher.init(Cipher.ENCRYPT_MODE, securekey, random);

            //现在,获取数据并加密 正式执行加密操作
            //按单部分操作加密或解密数据,或者结束一个多部分操作
            return Base64.encodeBase64String(cipher.doFinal(datasource));

        } catch (Throwable e) {
            log.error("DES 加密异常,详情:" + e.toString());
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @return 解密后的字符串
     * @Description: 解密
     * @Param encodedStrBase64 加密过的密文base64形式(由加密方法返回的)  key 密钥,长度必须大于等于8位
     * @Date: 2021/4/8 13:27
     **/
    public static String decrypt(String encodedStrBase64, String key) throws Exception {
        if (encodedStrBase64 == null || encodedStrBase64.isEmpty()) {
            throw new Exception("密文不能为空!");
        }

        if (key == null || key.isEmpty() || key.length() < 8) {
            throw new Exception("密钥不能为空,且密钥必须大于等于8位!");
        }

        byte[] src = Base64.decodeBase64(encodedStrBase64);

        // DES算法要求有一个可信任的随机数源
        SecureRandom random = new SecureRandom();
        // 创建一个DESKeySpec对象
        DESKeySpec desKey = new DESKeySpec(key.getBytes("utf-8"));
        // 创建一个密匙工厂
        // 返回实现指定转换的 Cipher 对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        // 将DESKeySpec对象转换成SecretKey对象
        SecretKey securekey = keyFactory.generateSecret(desKey);
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance("DES");
        // 用密匙初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, random);
        // 真正开始解密操作
        return new String(cipher.doFinal(src));
    }
}

来源:https://blog.csdn.net/yunfeng482/article/details/82085541

标签:JAVA,DESKeySpec,DES,解密,Cipher,key,new,加密
From: https://www.cnblogs.com/daytoy105/p/16711020.html

相关文章

  • java unicode编程
    publicclassdemo{publicstaticvoidmain(String[]args){//\u000d\u0074\u0072\u0079{//\u000d\u0069\u006e\u0074\u0020\u......
  • 【Java基础】代码块
    1.代码块说明一对花括号表示,仅可以使用static修饰,可以用来对类或对象进行初始化。静态代码块:static修饰随着类的加载而执行,只执行一次,有多个时,按顺序执行。无法调用......
  • 体育馆预约小程序 运动场地预约小程序 java运动场地预约系统 体育馆预约管理系统 基于
    ......
  • Java线程Hotspot线程Linux线程源码穿透
    ​ 原理分析首先不妨先看一副图​编辑通常我们在Java开发中使用线程无非就是使用Thread类提供的一些API,比如newThread()、Thread.start()等等方法。那么对于Linux操......
  • java 取上月份最后一天日期8位
    1/**2*获取上个月的最后一天23点59分59秒的时间3*/4privateStringgetBeforeLastMonthdate()throwsException{5SimpleDateForma......
  • JavaScript 声明提升
    函数及变量的声明都将被提升到函数的最顶部。变量可以在使用后声明,也就是变量可以先使用再声明。声明提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最......
  • 避免Java异常栈被吞掉
    ThecompilerintheserverVMnowprovidescorrectstackbacktracesforall"cold"built-inexceptions.Forperformancepurposes,whensuchanexceptionisth......
  • JavaScript 错误 - throw、try 和 catch
    try 语句测试代码块的错误。catch 语句处理错误。throw 语句创建自定义错误。finally 语句在try和catch语句之后,无论是否有触发异常,该语句都会执行。语法tr......
  • JavaScript:David Flanagan 的权威指南
    JavaScript:DavidFlanagan的权威指南JavaScript:DavidFlanagan的权威指南[JavaScript:权威指南-Twos表达式是可以被评估以产生值的短语。语句是以…结尾的完整句子......
  • ob_DES_艺恩
    网站aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s抓包返回密文  点到initator,PostAPI,断点,刷新,e为传进来的密文   webInst......