Java 加解密知识介绍

摘要:Java 提供了多种加密算法和工具来支持数据的安全传输和存储。本文将介绍 Java 中的加密基础知识,包括对称加密、非对称加密、哈希函数和数字签名,以及如何在 Java 中使用这些技术。

一、对称加密

对称加密是指使用相同的密钥进行加密和解密的数据加密方法。Java 提供了多种对称加密算法,如 AES(高级加密标准)、DES(数据加密标准)等。

  1. 创建密钥
    可以使用 SecretKeyFactory 类来创建对称密钥。例如:
java 复制代码
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.SecretKeySpec;
SecretKey key = SecretKeyFactory.getInstance("AES").generateSecret(new SecretKeySpec("myKey".getBytes("UTF-8"), "AES"));
  1. 加密和解密数据
    可以使用 Cipher 类来加密和解密数据。例如:
java 复制代码
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal("myData".getBytes("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);

二、非对称加密

非对称加密是指使用一对密钥(公钥和私钥)进行加密和解密的数据加密方法。Java 提供了多种非对称加密算法,如 RSA、ECC(椭圆曲线密码学)等。

  1. 生成密钥对
    可以使用 KeyPairGenerator 类来生成密钥对。例如:
java 复制代码
import javax.crypto.KeyPair;
import javax.crypto.KeyPairGenerator;
import javax.crypto.spec.X509EncodedKeySpec;
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
  1. 加密和解密数据
    可以使用 PublicKeyPrivateKey 来加密和解密数据。例如:
java 复制代码
import java.security.PublicKey;
import java.security.PrivateKey;
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
byte[] encrypted = publicKey.encrypt("myData".getBytes("UTF-8"));
byte[] decrypted = privateKey.decrypt(encrypted);

三、哈希函数

哈希函数将输入数据转换为固定长度的摘要,通常用于验证数据的完整性和一致性。Java 提供了多种哈希函数,如 MD5、SHA-256 等。

  1. 计算哈希值
    可以使用 MessageDigest 类来计算哈希值。例如:
java 复制代码
import java.security.MessageDigest;
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] digest = md.digest("myData".getBytes("UTF-8"));

四、数字签名

数字签名是一种基于非对称加密的验证机制,用于验证数据的完整性和来源。Java 提供了 Signature 类来创建数字签名。

  1. 创建签名
    可以使用 Signature 类来创建数字签名。例如:
java 复制代码
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.Signature;
KeyPair keyPair = ... // 生成密钥对
PrivateKey privateKey = keyPair.getPrivate();
Signature signature = Signature.getInstance("SHA256WithRSA");
signature.init(Signature.SIGN_MODE, privateKey);
byte[] signatureBytes = signature.sign("myData".getBytes("UTF-8"));
  1. 验证签名
    可以使用 PublicKeySignature 类来验证数字签名。例如:
java 复制代码
import java.security.KeyPair;
import java.security.PublicKey;
import java.security.Signature;
KeyPair keyPair = ... // 生成密钥对
PublicKey publicKey = keyPair.getPublic();
Signature signature = Signature.getInstance("SHA256WithRSA");
signature.init(Signature.VERIFY_MODE, publicKey);
boolean isVerified = signature.verify("myData".getBytes("UTF-8"), signatureBytes);

五、总结

本文介绍了 Java 中的加密基础知识,包括对称加密、非对称加密、哈希函数和数字签名。通过学习这些技术,您可以更好地保护数据的安全性,确保数据的完整性和来源的可靠性。随着加密技术的不断发展,Java 提供了更多高级和强大的加密工具,以支持复杂的安全需求。

相关推荐
万粉变现经纪人3 分钟前
如何解决 import aiohttp ModuleNotFoundError: No module named ‘aiohttp’
python·scrapy·beautifulsoup·aigc·pillow·pip·httpx
每日任务(希望进OD版)6 分钟前
线性DP、区间DP
开发语言·数据结构·c++·算法·动态规划
怨言.7 分钟前
Java内部类详解:从基础概念到实战应用(附案例)
java·开发语言
AC赳赳老秦7 分钟前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
XiYang-DING8 分钟前
【Java】 Java 集合框架
java·开发语言
charlie1145141919 分钟前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
diving deep14 分钟前
从零构建大模型--实操--搭建python环境
开发语言·python
We་ct14 分钟前
LeetCode 172. 阶乘后的零:从暴力到最优,拆解解题核心
开发语言·前端·javascript·算法·leetcode·typescript
心勤则明15 分钟前
Spring AI Alibaba Skills 的渐进式披露与热更新实战
java·后端·spring
netyeaxi22 分钟前
Spring:如何查看Spring应用对外提供了哪些API接口?
java·spring