CBC算法实践Demo

news/2025/2/12 2:35:36/

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

全部代码

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);}
}

http://www.ppmy.cn/news/1233215.html

相关文章

构建ansible学习环境

1.设置主机名 命名命令:hostnamectl set-hostname xx 设置4台主机 servera serverb serverc serverd 2.配置扩展源 1)cd /etc/yum.reops.d/ 2)vim local.repo [biaoshi] namemiaoshu baseurl/mnt/BaseOS enable1 gpgcheck0 [biaoshi2] namemi…

【计算机网络学习之路】Windows下的socket编程

文章目录 前言Windows下的socket编程1.预备工作2. socket编程 结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本篇文章仅记录Windows下socket编程和Linux的不同,并没…

使用docker搭建socks5代理

我参考MuleSoft Help Center成功搭建了socks5代理服务器 文字内容如下(怕以后访问不了) How to set up a testing SOCKS5 proxy (dante) for Anypoint monitoring in RTF (Runtime Fabric) A demonstration to set up a SockS5 proxy with Dante and se…

科技的成就(五十三)

503、任天堂首次公开 Switch 2016 年 10 月 20 日,任天堂首次公开 Switch 正式名称及造型。Switch 是任天堂推出的混合型游戏机,可作为家用游戏机,也可作为便携式掌机。Switch 在开发过程中就以代号 NX 而闻名,成为当年的现象级产…

【iOS】知乎日报

文章目录 前言一、首页1.网络的异步请求2.避免同一网络请求执行多次3.下拉刷新与上拉加载的实现下拉刷新上拉加载 二、网页1.webView的实现2.webView的滑动加载3.网页与首页内容的同步更新 三、评论区Masonory实现行高自适应 四、收藏中心通过FMDB实现数据持久化1.创建或打开数…

priority_queue简单实现(优先级队列)(c++)

priority_queue priority_queue介绍逻辑实现框架调整算法adjust_up()adjust_down() 仿函数/比较函数仿函数特性 构造函数迭代器区间构造 完整优先级队列代码 priority_queue介绍 pri_que是一个容器适配器,它的底层是其他容器,并由这些容器再封装而来。类…

Java虚拟机(JVM)的调优技巧和实战

JVM是Java应用程序的运行环境,它负责管理Java应用程序的内存分配、垃圾收集等重要任务。然而,JVM的默认设置并不总是适合所有应用程序,因此需要根据应用程序的需求进行调优。通过对JVM进行调优,可以大大提高Java应用程序的性能和可…

LiteOS同步实验(实现生产者-消费者问题)

效果如下图: 给大家解释一下上述效果:在左侧(顶格)的是生产者(Producer);在右侧(空格)的是消费者(Consumer)。生产者有1个,代号为“0”…