欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Java常用工具算法-2--加密算法1--对称加密算法(推荐AES算法)

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

2025/4/3 10:51:29 来源:https://blog.csdn.net/qq_34207422/article/details/146918996  浏览:    关键词: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!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词