魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Language - Java - Java SE - API - 「javax.crypto」

文章摘要: 提供了用于加密和解密的类和接口。

介绍

简要说明

  • 提供了用于加密和解密的类和接口。
  • 支持多种加密标准,包括对称加密(如 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

提供关键规范和算法参数规范的类和接口。

更新时间: 2025/11/16 17:17