Java 数据加密技术:AES、RSA 加密保护核心数据安全

举报
江南清风起 发表于 2025/05/15 20:35:03 2025/05/15
【摘要】 Java 数据加密技术:AES、RSA 加密保护核心数据安全在当今数字化时代,数据安全成为至关重要的议题。Java 作为一种广泛使用的编程语言,在数据加密领域提供了多种强大的工具和技术。本文将深入探讨 Java 中的 AES 和 RSA 加密技术,通过详细代码实例展示它们如何保护核心数据安全。 一、数据加密概述数据加密是将原始数据(明文)通过加密算法转换为密文,只有拥有正确密钥的人才能将密...

Java 数据加密技术:AES、RSA 加密保护核心数据安全

在当今数字化时代,数据安全成为至关重要的议题。Java 作为一种广泛使用的编程语言,在数据加密领域提供了多种强大的工具和技术。本文将深入探讨 Java 中的 AES 和 RSA 加密技术,通过详细代码实例展示它们如何保护核心数据安全。

一、数据加密概述

数据加密是将原始数据(明文)通过加密算法转换为密文,只有拥有正确密钥的人才能将密文解密还原为明文。它在保护敏感信息、确保数据完整性以及验证身份等方面发挥着关键作用。例如,在网络通信中,加密可以防止黑客窃取传输中的数据;在数据存储时,加密能避免存储介质被盗导致的数据泄露。

二、AES 加密

(一)AES 简介

AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法。对称加密是指加密和解密使用相同的密钥。AES 具有高效性、安全性高的特点,被广泛应用于各种需要快速加密大量数据的场景,如磁盘加密、数据库加密等。

(二)AES 加密原理

AES 算法以固定块大小(128 位)对数据进行加密,支持 128、192 和 256 位的密钥长度。其加密过程包括多个轮次的变换,如字节替换、行位移、列混合和密钥添加等操作,这些操作相互组合使得加密后的密文具有高度的随机性和复杂性,难以被破解。

(三)Java 中的 AES 加密代码示例

1. 加密代码

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

public class AESUtil {

    private static final String AES = "AES";

    public static String encrypt(String content, String key) throws Exception {
        // 创建 AES 密钥生成器
        KeyGenerator keyGenerator = KeyGenerator.getInstance(AES);
        // 初始化密钥生成器,设置密钥长度(如 128 位)
        keyGenerator.init(128);
        // 生成密钥
        SecretKey secretKey = keyGenerator.generateKey();
        // 创建密码器
        Cipher cipher = Cipher.getInstance(AES);
        // 初始化密码器为加密模式,设置密钥
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(secretKey.getEncoded(), AES));
        // 执行加密操作
        byte[] result = cipher.doFinal(content.getBytes());
        // 将加密后的字节数组进行 Base64 编码,方便存储和传输
        return Base64.getEncoder().encodeToString(result);
    }

    public static void main(String[] args) {
        try {
            String content = "需要加密的敏感数据";
            String key = "这是一个 16 字节的密钥"; // 密钥长度符合需 AES 要求
            String encryptedData = encrypt(content, key);
            System.out.println("加密后的数据:" + encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 解密代码

public static String decrypt(String encryptedData, String key) throws Exception {
    // 创建密码器
    Cipher cipher = Cipher.getInstance(AES);
    // 初始化密码器为解密模式,设置密钥
    cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(), AES));
    // 对加密数据进行 Base64 解码
    byte[] encryptedBytes = Base64.getDecoder().decode(encryptedData);
    // 执行解密操作
    byte[] result = cipher.doFinal(encryptedBytes);
    // 将解密后的字节数组转换为字符串
    return new String(result);
}

public static void main(String[] args) {
    try {
        String encryptedData = "加密后的数据字符串";
        String key = "这是一个 16 字节的密钥";
        String decryptedData = decrypt(encryptedData, key);
        System.out.println("解密后的数据:" + decryptedData);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

三、RSA 加密

(一)RSA 简介

RSA(Rivest -ir Sham - Adleman)是一种非对称加密算法。它使用一对密钥,公钥和私钥。公钥可以公开,用于加密数据;私钥由用户自己保管,用于解密数据。RSA 的安全性基于大整数因数分解的困难性,在数字签名、密钥交换等场景中得到广泛应用,比如在 SSL/TLS 协议中用于加密通信的初始密钥交换。

(二)RSA 加密原理

RSA 算法首先选择两个大素数 p 和 q,计算它们的乘积 n = p × q。然后选择一个与 (p - 1)(q - 1) 互质的整数 e 作为公钥的一部分,接着计算 e 的模逆元 d 作为私钥。加密时,将明文 m 转换为整数,按照公式 c = m^e mod n 进行加密;解密时,根据公式 m = c^d mod n 恢复明文。

(三)Java 中的 RSA 加密代码示例

1. 生成密钥对

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;

public class RSAKeyPairGenerator {

    public static KeyPair generateKeyPair() throws Exception {
        // 创建密钥对生成器
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        // 初始化密钥对生成器,设置密钥长度(如 2048 位)
        keyPairGenerator.initialize(2048);
        // 生成密钥对
        return keyPairGenerator.generateKeyPair();
    }

    public static void main(String[] args) {
        try {
            KeyPair keyPair = generateKeyPair();
            PublicKey publicKey = keyPair.getPublic();
            PrivateKey privateKey = keyPair.getPrivate();
            System.out.println("公钥:" + publicKey);
            System.out.println("私钥:" + privateKey);
        } catch (Exception e) {
            e.printStackTrace();
           }
 }
}

2. 加密和解密

import javax.crypto.Cipher;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

public class RSAUtil {

    private static final String RSA = "RSA";

    public static String encrypt(String content, PublicKey publicKey) throws Exception {
        // 创建密码器
        Cipher cipher = Cipher.getInstance(RSA);
        // 初始化密码器为加密模式,设置公钥
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        // 执行加密操作
        byte[] result = cipher.doFinal(content.getBytes());
        // 对加密后的字节数组进行 Base64 编码
        return Base64.getEncoder().encodeToString(result);
    }

    public static String decrypt(String encryptedData, PrivateKey privateKey) throws Exception {
        // 创建密码器
        Cipher cipher = Cipher.getInstance(RSA);
        // 初始化密码器为解密模式,设置私钥
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        // 对加密数据进行 Base64 解码
        byte[] encryptedBytes = Base64.getDecoder().decode(encryptedData);
        // 执行解密操作
        byte[] result = cipher.doFinal(encryptedBytes);
        // 将解密后的字节数组转换为字符串
        return new String(result);
    }

    public static void main(String[] args) {
        try {
            KeyPair keyPair = RSAKeyPairGenerator.generateKeyPair();
            PublicKey publicKey = keyPair.getPublic();
            PrivateKey privateKey = keyPair.getPrivate();
            String content = "这是要加密的机密信息";
            String encryptedData = encrypt(content, publicKey);
            System.out.println("加密后的数据:" + encryptedData);
            String decryptedData = decrypt(encryptedData, privateKey);
            System.out.println("解密后的数据:" + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、AES 和 RSA 的比较与应用场景选择

(一)性能比较

AES 作为对称加密算法,在加密和解密速度上具有明显优势,尤其适合对大量数据进行快速加密处理。而 RSA 非对称加密算法由于其复杂的数学运算,加密解密速度相对较慢,不太适合直接用于大量数据的加密。

(二)安全性比较

两者在正确使用的情况下都具有较高的安全性。不过,RSA 的安全性依赖于密钥长度和算法实现的正确性,且随着计算技术的发展,其密钥长度需要不断增加以应对潜在的破解威胁。AES 的安全性则主要取决于密钥管理和算法模式选择等因素。

(三)应用场景选择

  • AES 适用场景

    • 对大量数据进行加密存储,如企业数据库中的敏感用户信息、财务数据等。
    • 在要求高吞吐量的网络数据传输加密场景,如高速数据链路中的数据加密。
  • RSA 适用场景

    • 数字签名场景,用于验证数据的完整性和来源的可靠性,例如软件签名确保用户下载的软件未被篡改。
    • 密钥交换场景,在通信双方建立安全通信通道时,使用 RSA 加密交换对称加密算法(如 AES)的密钥,之后再利用 AES 对通信数据进行加密,兼顾了安全性和效率。

在实际应用中,常常将 AES 和 RSA 结合使用,发挥两者的优势。例如,在安全通信中,首先使用 RSA 进行密钥交换,然后使用 AES 对后续的大量数据通信进行加密。这种混合加密模式既能保证通信的高效性,又能确保通信的安全性。

掌握 Java 中的 AES 和 RSA 加密技术对于开发安全可靠的软件系统至关重要。开发者应根据具体的应用需求和场景特点,合理选择和运用加密算法,保护核心数据免受安全威胁。同时,也要关注加密相关的性能优化、密钥管理等实际问题,以确保加密系统的有效性和实用性。

image.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。