首页 > 编程语言 >java加密解密

java加密解密

时间:2024-09-09 14:47:59浏览次数:10  
标签:AES 加密 String import 解密 Cipher key new java

k

package com.xcg.webapp.common;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
/**
 * 加密/解密
 * */
public class EncryptUtil {
    /**
     * @param text           明文/base64密文
     * @param key            密钥 AES必须16字节/DES必须8字节/TripleDES必须24字节
     * @param transformation 转换方式 AES/DES
     * @param mode           加密/解密
     */
    public static String extracted(String text, String key, String transformation, boolean mode) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
        Cipher cipher = Cipher.getInstance(transformation);
        //key与给定的密钥内容相关联的密钥算法的名称
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), transformation);
        //Cipher 的操作模式,加密模式:ENCRYPT_MODE、 解密模式:DECRYPT_MODE、包装模式:WRAP_MODE 或 解包装:UNWRAP_MODE)
        cipher.init(mode ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, secretKeySpec);
        byte[] bytes = cipher.doFinal(mode ? text.getBytes(StandardCharsets.UTF_8) : Base64.getDecoder().decode(text));
        return mode ? new String(Base64.getEncoder().encode(bytes)) : new String(bytes);
    }
//    原文链接:https://blog.csdn.net/qq_51534884/article/details/130361254

    public static String encrypt(String key, String plaintext) {
        try {
            byte[] keyBytes = key.getBytes();
            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            byte[] iv = cipher.getParameters().getParameterSpec(IvParameterSpec.class).getIV();
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv));
            byte[] ciphertext = cipher.doFinal(plaintext.getBytes());
            return Base64.getEncoder().encodeToString(iv) + ":" + Base64.getEncoder().encodeToString(ciphertext);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static String decrypt(String key, String ciphertext) {
        try {
            byte[] keyBytes = key.getBytes();
            String[] parts = ciphertext.split(":");
            byte[] iv = Base64.getDecoder().decode(parts[0]);
            byte[] encrypted = Base64.getDecoder().decode(parts[1]);
            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));
            byte[] plaintext = cipher.doFinal(encrypted);
            return new String(plaintext);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
//    原文链接:https://cloud.tencent.com/developer/information/%E7%94%A8Java%E5%8A%A0%E5%AF%86%E5%92%8C%E8%A7%A3%E5%AF%86%E5%AF%86%E7%A0%81
}

String text = "你好世界!!";
        String key = "12345678";//des必须8字节
        // 算法/模式/填充  默认 DES/ECB/PKCS5Padding
        String transformation = "DES";

        String key1 = "abcd56781234abcd";//aes必须16字节
        String transformation1 = "AES";

        String key2 = "123456781234567812345678";//TripleDES使用24字节的key
        String transformation2 = "TripleDes";

//        String extractedStr = AESDESUtil.extracted(text, key1, transformation1, true);
//        System.out.println("AES加密:" + extractedStr);
//        String extractedStr1 = AESDESUtil.extracted(extractedStr, key1, transformation1, false);
//        System.out.println("解密:" + extractedStr1);
//        原文链接:https://blog.csdn.net/qq_51534884/article/details/130361254

        String extractedStr = EncryptUtil.encrypt(key1, text);
        System.out.println("AES加密:" + extractedStr);
        String extractedStr1 = EncryptUtil.decrypt(key1, extractedStr);
        System.out.println("AES解密:" + extractedStr1);

 

标签:AES,加密,String,import,解密,Cipher,key,new,java
From: https://www.cnblogs.com/xsj1989/p/18404547

相关文章

  • 2-1Java对象和类
    Java对象和类Java作为一种面向对象语言。支持以下基本概念:多态继承封装抽象类对象实例方法重载本节我们重点研究对象和类的概念。对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等......
  • 基于Java实现的大学生就业服务平台设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的摄影跟拍预订管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的乒乓球预约管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的私人健身与教练预约管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • Java 工程解耦即高内聚低耦合
      工程结构和模块不断地从JAVA 的单体应用中分离 。单体应用结构只有一个项目结构,有一 个项目文件包 。 刚开学习计算机JAVA 编程的时候,JAVA 项目分为JAVAEE 和JAVASE. 标 准的JAVA 类库jdk  是基础的JAVA 开发工具箱,没有绑定任何商业开发的工具包 。......
  • Java--面向对象设计原则
    衡量软件设计质量(高内聚,低耦合)可读性可复用性(继承,封装)可扩展性可维护性(更好定位bug,日志)可测试性单一职责原则(SRP)不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发......
  • Java--设计模式
    目录23种设计模式创建型模式结构型模式行为型模式设计模式的本质单例模式工厂模式定义解耦(对象使用过程+对象创建过程)分类简单工厂模式代理模式适配器模式外观模式策略模式23种设计模式创建型模式工厂模式(FactoryPattern)抽象工厂模式(AbstractFactoryPattern)单例模式(S......
  • 什么软件能对CAD文件进行加密?这10款图纸加密工具保你安心
    在当今数字化时代,CAD文件的安全性问题日益凸显。对于设计师和企业来说,保护这些包含宝贵知识产权和核心竞争力的图纸文件免受未经授权的访问和泄露至关重要。为此,市面上涌现出多种CAD文件加密软件,它们提供有效的加密措施来确保图纸文件的安全。1.安秉网盾图纸加密软件安秉网......
  • 电脑文件如何加密?分享十个常见的文件加密软件神器!
    在这个数字化飞速发展的时代,保护个人和商业数据的安全变得尤为重要。电脑文件加密是确保信息安全的关键步骤之一,它能够防止未经授权的访问和数据泄露。今天,我将为大家介绍十款常见的文件加密软件神器,它们各具特色,能够满足不同用户的需求。1.安秉加密软件安秉加密软件提供用......