文章摘要: 提供了用于加密和解密的类和接口。
介绍
简要说明
- 提供了用于加密和解密的类和接口。
- 支持多种加密标准,包括对称加密(如 AES、DES)、非对称加密(如 RSA)、消息摘要(如 MD5、SHA)以及密钥生成和管理等功能。
主要功能
- 对称加密:支持常用的对称加密算法,如 AES、DES、DESede(Triple DES)等。
- 非对称加密:支持非对称加密算法,如 RSA。
- 密钥生成:提供密钥生成器(KeyGenerator)和密钥对生成器(KeyPairGenerator)用于生成密钥。
- 密钥协商:支持密钥协商协议,如 Diffie-Hellman。
- 密钥管理:提供密钥库(KeyStore)和密钥规范(KeySpec)等类来管理密钥。
- 加密模式:支持不同的加密模式,如 ECB、CBC、CFB、OFB 等。
- 填充模式:支持不同的填充模式,如 NoPadding、PKCS5Padding 等。
- 消息摘要:虽然消息摘要主要在
java.security.MessageDigest中,但javax.crypto也支持与加密相关的摘要操作。
注意事项
- 安全性:加密算法和实现的选择对安全性至关重要。应避免使用不再安全的算法(如 MD5、SHA-1)。
- 密钥管理:密钥的安全管理是加密过程中的关键部分,需要妥善处理密钥的生成、存储、传输和销毁。
- 性能:加密操作可能非常耗时,尤其是在处理大量数据时,应考虑性能影响。
- 兼容性:不同的 Java 版本和不同的 JCA(Java Cryptography Architecture)提供者可能支持不同的加密算法和功能。
适用场景
- 数据加密:在需要保护数据隐私的场景中,如网络通信、数据存储等。
- 安全认证:在需要验证数据完整性和来源的场景中,可以使用加密算法生成摘要或签名。
- 密钥交换:在需要安全交换密钥的场景中,如 SSL/TLS 协议中。
- 安全协议实现:在实现基于加密的安全协议时,如 HTTPS、VPN 等。
主要类和接口
2.1 Cipher类
- 用于加密和解密数据。
- 支持多种加密模式,如 ECB、CBC、CFB、OFB 等。
- 支持多种填充模式,如 NoPadding、PKCS5Padding 等。
2.2 KeyGenerator类
- 用于生成对称密钥。
2.3 KeyAgreement类
- 用于密钥协商,如 Diffie-Hellman 密钥交换。
2.4 SecretKey类
- 表示对称密钥。
2.5 KeyPair类
- 用于非对称加密的公钥和私钥对。
2.6 KeyPairGenerator类
- 用于生成非对称密钥对。
2.7 Mac类
- 提供消息认证码(MAC)功能。
2.8 SealedObject类
- 用于封装加密的对象,以便安全传输。
2.9 CipherInputStream和CipherOutputStream类
- 用于加密和解密数据流。
3. 使用场景
- 加密敏感数据,如用户密码、信用卡信息等。
- 实现安全的通信通道,如 SSL/TLS。
- 生成和验证数字签名。
- 实现基于密钥的安全认证。
示例代码
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class CryptoExample {
public static void main(String[] args) throws Exception {
// 生成 AES 密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
// 转换为字节数组
byte[] keyBytes = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// 创建 Cipher 实例并初始化为加密模式
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
// 加密数据
String originalText = "Hello, World!";
byte[] encryptedText = cipher.doFinal(originalText.getBytes());
// 初始化 Cipher 为解密模式
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 解密数据
byte[] decryptedText = cipher.doFinal(encryptedText);
System.out.println("Decrypted Text: " + new String(decryptedText));
}
}
javax.crypto.interfaces
为 RSA Laboratories 的 PKCS #3 中定义的 Diffie-Hellman 密钥提供接口。
javax.crypto.spec
提供关键规范和算法参数规范的类和接口。