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 提供了更多高级和强大的加密工具,以支持复杂的安全需求。

相关推荐
Grey Zeng3 小时前
Java SE 25新增特性
java·jdk·jdk新特性·jdk25
雨白4 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
TF男孩4 小时前
ARQ:一款低成本的消息队列,实现每秒万级吞吐
后端·python·消息队列
架构师沉默9 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
该用户已不存在9 小时前
Mojo vs Python vs Rust: 2025年搞AI,该学哪个?
后端·python·rust
Java中文社群10 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL11 小时前
JVM 类加载:双亲委派机制
java·后端
站大爷IP11 小时前
Java调用Python的5种实用方案:从简单到进阶的全场景解析
python
用户2986985301411 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥12 小时前
原来公平锁和非公平锁差别这么大
java