首页 > 编程语言 >Java实现DES编码加解密 - 密钥为: Hex

Java实现DES编码加解密 - 密钥为: Hex

时间:2025-01-20 19:03:10浏览次数:1  
标签:Java String keyBytes DES Hex 密钥 key byte

  1. 编写工具类

    public class DesPasswordUtil {
    
        public static final String WIFI_DES_KEY = "TmuhP9PDtcQ=";
    
        /**
         * 生成密钥
         *
         * @return {@link String }
         * @throws Exception 例外
         */
        public static String generateKey() throws Exception {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
            keyGenerator.init(56); // DES密钥长度为56位
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] keyBytes = secretKey.getEncoded();
            // 截取前8字节
            byte[] truncatedKeyBytes = new byte[8];
            System.arraycopy(keyBytes, 0, truncatedKeyBytes, 0, 8);
            return Base64.getEncoder().encodeToString(truncatedKeyBytes);
        }
    
        /**
         * 加密
         *
         * @param data 数据
         * @param key  钥匙
         * @return {@link String }
         * @throws Exception 例外
         */
        public static String encrypt(String data, String key) throws Exception {
            byte[] keyBytes = Base64.getDecoder().decode(key);
            // 确保密钥长度为8字节
            if (keyBytes.length != 8) {
                throw new IllegalArgumentException("密钥长度必须为8字节");
            }
            SecretKey secretKey = new SecretKeySpec(keyBytes, "DES");
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));
            return Base64.getEncoder().encodeToString(encryptedBytes);
        }
    
        /**
         * 解密
         *
         * @param encryptedData 加密数据
         * @param key           钥匙
         * @return {@link String }
         * @throws Exception 例外
         */
        public static String decrypt(String encryptedData, String key) throws Exception {
            byte[] encryptedBytes = Base64.getDecoder().decode(encryptedData);
            byte[] keyBytes = Base64.getDecoder().decode(key);
            // 确保密钥长度为8字节
            if (keyBytes.length != 8) {
                throw new IllegalArgumentException("密钥长度必须为8字节");
            }
            SecretKey secretKey = new SecretKeySpec(keyBytes, "DES");
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
            return new String(decryptedBytes, "UTF-8");
        }
    }
    
  2. 测试用例

    public static void main(String[] args) {
            try {
                String key = "H1eP+wGDMW0=";
    
                System.out.println("生成的密钥:" + key);
    
                String data = "123456";
                String encryptedData = DesPasswordUtil.encrypt(data, key);
                System.out.println("加密后的数据:" + encryptedData);
    
                String decryptedData = DesPasswordUtil.decrypt(encryptedData, key);
                System.out.println("解密后的数据:" + decryptedData);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  3. 输出结果

    生成的密钥:H1eP+wGDMW0=
    加密后的数据:hrKE2n/Pj0E=
    解密后的数据:123456
    

标签:Java,String,keyBytes,DES,Hex,密钥,key,byte
From: https://www.cnblogs.com/zhangjin0094/p/18682312

相关文章

  • JAVA动态代理
    什么是动态代理  动态代理是一种设计模式,允许开发者在运行时动态地创建实现了一组接口的代理对象。这些代理对象在调用目标对象的方法时,可以在方法调用前后添加自定义的逻辑,而无需修改目标对象的代码。动态代理的核心思想是提供一种灵活的方式来增强或改变原有对象的行为......
  • 在Java中什么是异常
    目录         一、定义:二、异常的类型1、检查型异常(CheckExceptions)2、运行时异常(RuntimeExceptions)3、错误(Errors)三、异常处理机制1、try-catch块2、finally块3、throws关键字四、自定义异常1、定义:2、示例:一、定义:异常(Exception)是在程序执行过程......
  • 【K8S系列】K8s 领域深度剖析:年度技术、工具与实战总结 (思维导图-java架构)
    创建一个关于Kubernetes(简称K8s)领域的深度剖析年度总结的思维导图,特别是针对Java架构师的需求,可以帮助梳理和理解过去一年中重要的技术进展、工具以及实战经验。下面是一个基于文本的思维导图结构建议,你可以根据这个结构使用任何思维导图软件来创建你的图形化版本。Kuberne......
  • AI编程工具使用技巧——Cursor (思维导图-java架构)
    Cursor是一个AI辅助编程工具,它能够帮助开发者更快地编写代码、理解现有代码库以及解决编程中遇到的问题。当涉及到Java架构时,利用Cursor可以极大地提高开发效率和代码质量。以下是围绕着如何使用Cursor进行Java项目开发的思维导图建议框架:AI编程工具使用技巧-Cursor(Java......
  • 人脸识别【java-基于OpenCV】思维导图-java架构
    为了创建一个关于基于OpenCV的Java人脸识别项目的思维导图,可以围绕项目的主要组成部分进行组织:环境搭建、数据准备、人脸检测、特征提取、模型训练、识别与验证、以及优化和部署。以下是一个结构化的建议框架,你可以根据这个框架使用任何思维导图软件来创建具体的图形化版本......
  • JAVA开源毕业设计 在线课程管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T137,文末自助获取源码\color{red}{T137,文末自助获取源码}......
  • Java初学者笔记-08、IO流
    I:负责把磁盘和网络中的数据读到程序内存中去。O:负责把程序内存中的数据写到网络或者磁盘中。按照流的内容,IO流分为字节流和字符流。字节流:最小单位是字节。适合操作所有类型的文件。比如音频、视频、图片文本等的复制,转移。字符流:只适合操作纯文本文件。比如读写txt,java文件......
  • RabbitMQ 及 java 使用
    目录1.消息中间件概述1.1.什么是消息中间件1.2.AMQP和JMS1.2.1.AMQP1.2.2.JMS1.2.3.AMQP与JMS区别1.3.消息队列产品1.4.RabbitMQ2.RabbitMQ入门2.1.搭建示例工程2.1.1.创建工程2.1.2.添加依赖2.2.编写生产者2.3.编写消费者2.4.小结3.AMQP3.1.相关概念介绍3.......
  • 使用 Java 获取淘宝推荐商品列表 API 接口的示例代码解析
    在电商领域,推荐系统是提升用户体验和促进销售的重要工具。淘宝开放平台提供了taobao.item.recommend接口,允许开发者根据用户行为、搜索关键词或分类ID获取推荐商品列表。本文将详细介绍如何使用Java调用该接口,并解析返回的数据。一、淘宝推荐商品接口简介taobao.item.reco......
  • (2024最新毕设合集)基于SpringBoot的游乐园管理系统-69394|可做计算机毕业设计JAVA、PHP
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3操作可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......