CBC算法实践Demo

效果图
在这里插入图片描述

全部代码

package encryption001;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class EncryptionDemo {

    // 加密算法
    private static final String ALGORITHM = "AES";
    // 加密模式和填充方式
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
    // 密钥,这里是一个简单的硬编码密钥,实际使用中需要更复杂的密钥管理机制
    private static final String SECRET_KEY = "MySecretKey12345"; // 16字符的密钥

    /**
     * 加密函数
     *
     * @param plainText 待加密的字符串
     * @return 加密后的Base64编码字符串
     */
    public static String encrypt(String plainText) {
        try {
            // 创建用于AES加密的密钥规格
            SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);

            // 创建AES加密器
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);

            // 初始化加密器为加密模式,并使用密钥
            cipher.init(Cipher.ENCRYPT_MODE, key);

            // 对明文进行加密,得到加密后的字节数组
            byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());

            // 将加密后的字节数组转换成Base64编码的字符串
            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            // 捕捉可能的异常,并打印错误信息
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 解密函数
     *
     * @param encryptedText 加密后的Base64编码字符串
     * @return 解密后的字符串
     */
    public static String decrypt(String encryptedText) {
        try {
            // 创建用于AES解密的密钥规格
            SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);

            // 创建AES解密器
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);

            // 初始化解密器为解密模式,并使用密钥
            cipher.init(Cipher.DECRYPT_MODE, key);

            // 对Base64编码的加密字符串进行解码,得到加密后的字节数组
            byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);

            // 对加密后的字节数组进行解密,得到原始的字节数组
            byte[] decryptedBytes = cipher.doFinal(encryptedBytes);

            // 将解密后的字节数组转换成字符串
            return new String(decryptedBytes);
        } catch (Exception e) {
            // 捕捉可能的异常,并打印错误信息
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 主函数,用于测试加解密功能
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 待加密的原始文本
        String originalText = "Hello, Encryption!";
        System.out.println("Original Text: " + originalText);

        // 调用加密函数,得到加密后的字符串
        String encryptedText = encrypt(originalText);
        System.out.println("Encrypted Text: " + encryptedText);

        // 调用解密函数,得到解密后的字符串
        String decryptedText = decrypt(encryptedText);
        System.out.println("Decrypted Text: " + decryptedText);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/175242.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件工程--软件建模--结构化方法通俗语言总结(暴肝超详解)(包含数据流图、数据字典、ER图、结构化设计和优化......)

目录 结构化分析 数据流图DFD 定义数据字典 实体关系图(E-R图) 结构化设计 变换映射 事务映射 优化结构设计 实例分析 详细设计(过程设计) 结构化方法是一种系统化开发软件的方法,该方法基于模块化的思想&am…

使用vue-cli搭建vue项目

1:安装vue-cli 命令:npm install -g vue/cli 2:查看安装的版本 vue --version 或者 vue -V 3:创建项目 vue create 项目名称 名称小写 4:vue2框架中根据自己的需求选择(我选择…

springboot+bootstrap+java农业电商服务商城系统_30249

本农业电商服务系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了管理员、会员和商家这三者的需求。操作简单易懂,合理分析各个模块的功能,尽可能…

系列二、为什么要使用ThreadLocal?

一、为什么要使用ThreadLocal? 1.1、概述 并发场景下,会存在多个线程同时修改一个共享变量的场景,这就有可能会出现线程安全的问题。为了解决线程安全问题,可以用加锁的方式,比如对核心代码使用synchronized或者Lock进…

排序算法--插入排序

实现逻辑 ① 从第一个元素开始,该元素可以认为已经被排序 ② 取出下一个元素,在已经排序的元素序列中从后向前扫描 ③如果该元素(已排序)大于新元素,将该元素移到下一位置 ④ 重复步骤③,直到找到已排序的元…

最新红盟云卡个人自动发卡开源系统源码+全开源无加密+虚拟商品在线售卖平台

源码简介: 最新红盟云卡个人自动发卡开源系统源码全开源无加密虚拟商品在线售卖平台,支持多个接口的个人免签功能。 红盟云卡系统是一款基于PHP和MySQL开发的虚拟商品在线售卖平台。它具备美观且功能丰富的发卡网站特性,并可与社区进行无缝…

数独·12中解法·anroid 数独小游戏·休闲益智小游戏

标题数独12中解法anroid 数独小游戏休闲益智小游戏(继续更新中……) 一款经典数独训练app 资源下载 (0积分)https://download.csdn.net/download/qq_38355313/88544810 —— —— 数独(sh d)是源自18世纪…

重磅!TikTok Shop将以新方式重启印尼业务

据报道,TikTok将通过与印尼电商平台合作的方式重启电商业务。 据悉,印尼合作社和中小企业部就TikTok Shop将在印尼重新开业的消息发表了讲话。合作社和中小企业部Temmy Satya Permana证实TikTok Shop将在印尼重新开业的消息。他表示,TikTok …

酒店预订订房小程序源码系统+多酒店入驻 功能齐全 附带完整的搭建教程

随着互联网的快速发展,越来越多的人选择通过在线预订平台预订酒店。为了满足这一需求,我们开发了这个酒店预订订房小程序源码系统。该系统基于先进的云计算技术和大数据分析,旨在为用户提供更加便捷、智能的酒店预订服务。 以下是部分代码示…

java+springboot+bootstrap校园闲置物品拍卖交易平台_ngad7-

根据日常实际需要,一方面需要在系统中实现基础信息的管理,同时还需要结合实际情况的需要,提供校园闲置物品交易管理功能,方便校园闲置物品交易管理工作的展开,综合考虑,本套系统应该满足如下要求&#xff1…

【C++】二叉搜索树

二叉搜索树 1.二叉搜索树概念2.二叉搜索的实现2.1结点2.1基本框架2.2插入2.3查找2.4删除2.5打印 3.二叉搜索树递归实现3.1查找3.2插入3.3删除 4.二叉搜索树默认成员函数4.1构造4.2析构4.3拷贝构造4.4赋值重载 6.二叉搜索树的应用6.1K模型6.2KV模型 7.二叉搜索树的性能分析 喜欢…

Apache服务Rwrite功能使用

Rewrite也称为规则重写,主要功能是实现浏览器访问时,URL的跳转。其正则表达式是基于Perl语言。要使用rewrite功能,Apache服务器需要添加rewrite模块。如果使用源码编译安装,–enable-rewrite。有了rewrite模块后,需要在…

Rust生态系统:探索常用的库和框架

大家好!我是lincyang。 今天我们来探索Rust的生态系统,特别是其中的一些常用库和框架。 Rust生态系统虽然相比于一些更成熟的语言还在成长阶段,但已经有很多强大的工具和库支持各种应用的开发。 常用的Rust库和框架 Serde:一个…

Redis篇---第十三篇

系列文章目录 文章目录 系列文章目录前言一、redis的过期策略以及内存淘汰机制二、Redis 为什么是单线程的三、Redis 常见性能问题和解决方案?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看…

绝地求生:想玩以前的老地图

小编是22年8月左右开始玩的,更早以前跟同学偶尔玩过几次,所以萨诺2.0玩过,不过那时候菜的还不如人机,死了都看不到人在哪,所以对地图没啥印象,比较有印象的是地图色调变得很黄昏。 自闭城 遗迹 这是迪厅&am…

机器人算法—ROS TF坐标变换

1.TF基本概念 (1)什么是TF? TF是Transformations Frames的缩写。在ROS中,是一个工具包,提供了坐标转换等方面的功能。 tf工具包,底层实现采用的是一种树状数据结构,根据时间缓冲并维护多个参考…

【云栖 2023】姜伟华:Hologres Serverless 之路——揭秘弹性计算组

云布道师 本文根据 2023 云栖大会演讲实录整理而成,演讲信息如下: 演讲人:姜伟华 | 阿里云计算平台事业部资深技术专家、阿里云实时数仓 Hologres 研发负责人 演讲主题:Hologres Serverless 之路——揭秘弹性计算组 实时化成为…

基于SSM 离退休管理平台-计算机毕设 附源码 52629

ssm离退休管理平台 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用SSM技术和mysql数据库来完成对系统的…

vatee万腾科技先锋之选:vatee创新力驱动着未来发展

在科技潮流的浩荡前行中,Vatee万腾崭新的科技先锋之选正以强大的创新力引领着未来的发展。Vatee万腾凭借其前瞻性的技术理念和卓越的创新实践,成为业界的引领者,为整个科技行业树立了标杆。 Vatee万腾不仅仅是一家科技公司,更是一…

django ModelSerializer自定义显示字段

文章目录 前言一、问题二、解决 前言 最近在复习django的时候,发现了一个有趣的问题,解决了之后特意记录下来,以供以后参考。 一、问题 相信大家使用django的时候,被其DRF的强大功能所折服,因为它能通过简单的代码就…