Java常用工具算法-2--加密算法1--对称加密算法(推荐AES算法)

1、定义与核心原理

  • 定义:加密和解密使用相同密钥的算法。
  • 工作流程:
    1. 秘钥协商:双方需提前通过安全信道共享密钥。
    2. 加密过程:发送方用密钥对明文加密,生成密文。
    3. 解密过程:接收方用相同密钥对密文解密,还原明文。
  • 关键点:密钥的安全性是加密系统的核心,一旦密钥泄露,所有加密数据将暴露。

2、特点

  • 优点:
    • 速度快:算法计算量小,适合加密大量数据。
    • 高效:加密和解密效率高,资源消耗低。
    • 成熟技术:算法公开且经过长期验证(如 AES、DES)。
  • 缺点:
    • 密钥分发问题:双方需提前安全共享密钥,密钥管理复杂。
    • 秘钥管理安全性差:若密钥泄露,所有通信内容可被破解。
    • 扩展性差:在分布式系统中,用户数量增加会导致密钥数量呈几何级增长(如n个用户需n(n-1)/2个密钥)。

3、常见算法分类

(1)、DES(Data Encryption Standard)(不推荐)

基本信息:

  • 提出时间:1977年由NIST标准化。
  • 密钥长度:64位(实际有效56位,每8位包含奇偶校验位)。
  • 分组长度:64位(将明文分组为64位块处理)。
  • 轮数:16轮加密。

特点:

  • 优点:早期广泛使用,算法简单。
  • 缺点:
    • 密钥长度过短(56位),易受暴力破解(如1998年被破解)。
    • 现已 不推荐使用,仅用于遗留系统。

应用场景:

  • 历史用途:金融、政府系统(如ATM、旧版SSL)。
  • 替代方案:被3DES和AES取代。

(2)、3DES(Triple DES)(不推荐)

基本信息:

  • 改进自:DES的三重加密变体。
  • 密钥长度:168位(3个独立56位密钥),或112位(2个密钥)。
  • 加密方式:执行三次DES加密(如加密-解密-加密)。

特点:

  • 优点:
    • 提升了DES的安全性,抵抗差分攻击。
    • 向后兼容DES,可在旧系统中使用。
  • 缺点:
    • 速度较慢(三倍DES计算量)。
    • 现逐渐被 AES取代。

应用场景:

  • 过渡方案:旧系统升级时的临时选择。
  • 金融领域:部分ATM和支付系统。

(3)、AES(Advanced Encryption Standard)(推荐)

基本信息:

  • 提出时间:2001年由NIST标准化。
  • 密钥长度:128位、192位、256位(安全性随位数提升)。
  • 分组长度:128位(固定)。
  • 轮数:10-14轮(根据密钥长度不同)。

特点:

  • 优点:
    • 安全性高:无已知有效破解方法。
    • 效率高:软件和硬件实现均高效。
    • 广泛支持:成为 国际标准(替代DES)。
  • 缺点:
    • 需管理不同密钥长度的密钥。

应用场景:

  • 主流标准:SSL/TLS、HTTPS、IPSec。
  • 政府与军事:敏感数据加密。
  • 区块链:部分协议使用AES加密交易数据。

(4)、Blowfish

基本信息:

  • 提出时间:1993年由Bruce Schneier设计。
  • 密钥长度:可变(32位到448位)。
  • 分组长度:64位。

特点:

  • 优点:
    • 免费无专利:开源且无使用限制。
    • 灵活密钥长度:适应不同安全需求。
  • 缺点:
    • 分组较短(64位),安全性低于AES。

应用场景:

  • 轻量级设备:嵌入式系统、密码管理器(如KeePass)。

(5)、IDEA(International Data Encryption Algorithm)

基本信息:

  • 提出时间:1991年。
  • 密钥长度:128位。
  • 分组长度:64位。

特点:

  • 优点:
    • 强加密强度,无已知有效攻击。
    • 曾用于PGP(Pretty Good Privacy)。
  • 缺点:
    • 专利限制(已过期)。
    • 分组较短,逐渐被AES取代。

应用场景:

  • 历史应用:早期PGP和SSL/TLS。

分类对比:
在这里插入图片描述

4、对称加密的工作模式

对称加密算法通常需要结合 工作模式 来处理实际数据(如分组加密、流加密等)。

常见模式包括:

(1)、ECB(电子密码本模式)

  • 原理:每个明文块独立加密,使用相同密钥。
  • 特点:
    • 简单但不安全:相同明文块生成相同密文块,易被分析。
    • 无初始向量(IV)需求。

(2)、CBC(密文分组链接模式)

  • 原理:当前密文块依赖前一个密文块,需初始向量(IV)。
  • 特点:
    • 安全性较高,防止重复明文块。
    • 需要IV,但IV无需保密。

(3)、CTR(计数器模式)

  • 原理:将密钥与计数器值加密生成“密钥流”,异或明文。
  • 特点:
    • 可并行处理,适合高速加密。
    • 需要唯一计数器值,避免重复。

(4)、GCM(伽罗瓦计数器模式)

  • 原理:结合CTR模式和认证码(Galois哈希)。
  • 特点:
    • 提供加密与认证(AEAD,如AES-GCM)。
    • 高效且安全,现代推荐模式。

5、应用场景

(1)、数据存储

  • 数据库加密:AES加密敏感字段。
  • 文件加密:如BitLocker(Windows)、FileVault(macOS)。
    (2)、通信加密
  • TLS/SSL:协商密钥后使用AES加密数据。
  • VoIP:实时语音通话加密(如ZRTP协议)。
    (3)、物联网(IoT)
  • 低功耗设备:使用轻量级算法(如AES-CTR)。
    (4)、典型应用:
  • 非对称+对称结合:用RSA交换AES密钥,再用AES加密数据(如HTTPS)。
  • 本地文件加密(如 ZIP 压缩包加密)。

6、示例代码(AES示例)

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;public class AESExample {public static void main(String[] args) throws Exception {String originalText = "Sensitive Data";System.out.println("Original Text: " + originalText);// 生成AES密钥SecretKey secretKey = generateAESKey();// 加密String encryptedText = encrypt(originalText, secretKey);System.out.println("Encrypted Text: " + encryptedText);// 解密String decryptedText = decrypt(encryptedText, secretKey);System.out.println("Decrypted Text: " + decryptedText);}// 生成秘钥private static SecretKey generateAESKey() throws Exception {KeyGenerator keyGen = KeyGenerator.getInstance("AES");keyGen.init(256); // 256-bit keyreturn keyGen.generateKey();}// 加密private static String encrypt(String plainText, SecretKey secretKey) throws Exception {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 使用CBC模式和PKCS5填充cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] iv = cipher.getIV(); // 初始化向量 (IV)byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());return Base64.getEncoder().encodeToString(iv) + ":" + Base64.getEncoder().encodeToString(encryptedBytes);}// 解密private static String decrypt(String encryptedText, SecretKey secretKey) throws Exception {String[] parts = encryptedText.split(":");byte[] iv = Base64.getDecoder().decode(parts[0]);byte[] encryptedBytes = Base64.getDecoder().decode(parts[1]);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(iv));byte[] decryptedBytes = cipher.doFinal(encryptedBytes);return new String(decryptedBytes);}
}

解释:

  • 密钥生成:使用KeyGenerator生成AES密钥,长度为256位。
  • 加密模式:使用CBC模式(推荐),并提供初始化向量(IV)以增强安全性。
  • 填充方式:使用PKCS5Padding填充,确保数据块符合AES的要求(128位块大小)。
  • Base64编码:将加密后的字节数组转换为字符串以便存储或传输。

逆风翻盘,Dare To Be!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS宏开发手册——Excel常用Api

目录 系列文章4、Excel常用Api4.1、判断是否是目标工作excel4.2、获取源工作表和目标工作表的引用4.3、获取单元格的值4.4、设置单元格的值4.5、合并单元格4.6、获取源范围4.7、获取源范围行数4.8、通过源来获取单元格的值4.9、设置单元格的背景颜色4.10、设置单元格的文字颜色…

安徽京准:GPS北斗卫星校时服务器助力大数据云计算

安徽京准:GPS北斗卫星校时服务器助力大数据云计算 安徽京准:GPS北斗卫星校时服务器助力大数据云计算 GPS北斗卫星校时服务器在大数据与云计算系统中发挥着关键作用,其通过提供高精度、高可靠的时间同步服务,解决了分布式系统的核…

音视频 ColorSpace色彩空间详解

前言 基于前篇介绍YUV格式,本文继续介绍另一个重要概念颜色空间,又叫色彩空间;主要用于在音视频开发中的色彩空间转换。 色彩空间Color Space 色彩空间由色彩模型和色域共同定义。当色彩模型与特定的描述相关联以后,就称为色彩空间。 色彩模型Color Model 色彩模型Col…

高效定位 Go 应用问题:Go 可观测性功能深度解析

作者:古琦 背景 自 2024 年 6 月 26 日,阿里云 ARMS 团队正式推出面向 Go 应用的可观测性监控功能以来,我们与程序语言及编译器团队携手并进,持续深耕技术优化与功能拓展。这一创新性的解决方案旨在为开发者提供更为全面、深入且…

构造超小程序

文章目录 构造超小程序1 编译器-大小优化2 编译器-移除 C 异常3 链接器-移除所有依赖库4 移除所有函数依赖_RTC_InitBase() _RTC_Shutdown()__security_cookie __security_check_cookie()__chkstk() 5 链接器-移除清单文件6 链接器-移除调试信息7 链接器-关闭随机基址8 移除异常…

大语言模型开发框架——LangChain

什么是LangChain LangChain是一个开发由语言模型驱动的应用程序的框架,它提供了一套工具、组件和接口,可以简化构建高级语言模型应用程序的过程。利用LangChain可以使应用程序具备两个能力: 上下文感知 将语言模型与上下文(提示…

自动化释放linux服务器内存脚本

脚本说明 使用Linux的Cron定时任务结合Shell脚本来实现自动化的内存释放。 脚本用到sync系统命令 sync的作用:sync 是一个 Linux 系统命令,用于将文件系统缓存中的数据强制写入磁盘。 在你执行reboot、poweroff、shutdown命令时,系统会默认执…

Python Websockets库深度解析:构建高效的实时Web应用

引言 在现代Web开发中,实时通信已经成为许多应用的核心需求。无论是聊天应用、在线游戏、金融交易平台还是协作工具,都需要服务器和客户端之间建立持久、双向的通信通道。传统的HTTP协议由于其请求-响应模式,无法有效满足这些实时交互需求。…

【实用技巧】电脑重装后的Office下载和设置

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言下载设置总结互动致谢参考目录导航 前言 在数字化办公时代,Windows和…

Node.js 技术原理分析系列 —— Node.js 调试能力分析

Node.js 技术原理分析系列 —— Node.js 调试能力分析 Node.js 作为一个强大的 JavaScript 运行时环境,提供了丰富的调试能力,帮助开发者诊断和解决应用程序中的问题。本文将深入分析 Node.js 的调试原理和各种调试技术。 1. Node.js 调试原理 1.1 V8 调试器集成 Node.js…

【图论】最短路径问题总结

一图胜千言 单源最短路径 正权值 朴素Dijkstra dijkstra算法思想是维护一个永久集合U,全部点集合V。 循环n -1次 从源点开始,在未被访问的节点中,选择距离源点最近的节点 t。 以节点 t 为中间节点,更新从起点到其他节点的最短…

【最佳实践】win11使用hyper-v安装ubuntu 22/centos,并配置固定ip,扫坑记录

文章目录 场景查看本机的win11版本启用hyper-vhyper-v安装ubuntu22虚拟机1.准备好个人的 iso文件。2. hyper-v 快速创建3.编辑设置分配内存自定义磁盘位置设置磁盘大小连接网络修改虚拟机名称自定义检查点位置 和智能分页件位置虚拟机第一次连接给ubuntu22配置固定ip遇到过的坑…

自然语言处理(25:(终章Attention 1.)Attention的结构​)

系列文章目录 终章 1:Attention的结构 终章 2:带Attention的seq2seq的实现 终章 3:Attention的评价 终章 4:关于Attention的其他话题 终章 5:Attention的应用 目录 系列文章目录 前言 Attention的结构 一.seq…

Git 命令大全:通俗易懂的指南

Git 命令大全:通俗易懂的指南 Git 是一个功能强大且广泛使用的版本控制系统。对于初学者来说,它可能看起来有些复杂,但了解一些常用的 Git 命令可以帮助你更好地管理代码和协作开发。本文将介绍一些常用的 Git 命令,并解释它们的…

基于yolov11的棉花品种分类检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的棉花品种分类检测系统是一种高效、准确的农作物品种识别工具。该系统利用YOLOv11深度学习模型,能够实现对棉花主要品种,包括树棉(G. arboreum)、海岛棉(G. barbadense)、草棉&a…

论文:Generalized Category Discovery with Clustering Assignment Consistency

论文下载: https://arxiv.org/pdf/2310.19210 一、基本原理 该方法包括两个阶段:半监督表示学习和社区检测。在半监督表示学习中,使用了监督对比损失来充分地推导标记信息。此外,由于对比学习方法与协同训练假设一致,研究引入了…

Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器

JVM是Java高级部分,深入理解程序的运行及原理,面试中也问的比较多。 JVM是Java程序运行的虚拟机环境,实现了“一次编写,到处运行”。它负责将字节码解释或编译为机器码,管理内存和资源,并提供运行时环境&a…

MySQL 5.7 Online DDL 技术深度解析

14.13.1 在线DDL操作 索引操作主键操作列操作生成列操作外键操作表操作表空间操作分区操作 索引操作 下表概述了对索引操作的在线DDL支持情况。星号表示有附加信息、例外情况或依赖条件。有关详细信息,请参阅语法和使用说明。 操作原地执行重建表允许并发DML仅修…

kafka 报错消息太大解决方案 Broker: Message size too large

kafka-configs.sh --bootstrap-server localhost:9092 \ --alter --entity-type topics \ --entity-name sim_result_zy \ --add-config max.message.bytes10485880 学习营课程

HarmonyOS:ComposeTitleBar 组件自学指南

在日常的鸿蒙应用开发工作中,我们常常会面临构建美观且功能实用的用户界面的挑战。而标题栏作为应用界面的重要组成部分,它不仅承载着展示页面关键信息的重任,还能为用户提供便捷的操作入口。最近在参与的一个项目里,我就深深体会…