JCA1之框架理论

本文深入探讨了Java Cryptography Architecture (JCA)及其框架,包括加密服务提供者CSP、Provider类的实现、JCA核心类如MessageDigest、Signature、Cipher等的详细功能。介绍了如何使用Provider类注册和获取加密服务,以及如何使用各种引擎类进行加密、解密、签名和验证。文章还讨论了JCA中的关键类和接口,如KeyPair、KeySpecs、KeyFactory和KeyStore,以及它们在密钥管理中的作用。此外,还提到了JCE与JCA的关系以及它们在SSL/TLS实现中的应用。
摘要由CSDN通过智能技术生成

##关于JCE和JCA:

JCE 使用与 JCA 相同的体系结构,因此应该更恰当地将 JCE 视为 JCA 的一部分。
JDK 中的 JCA 包括两个软件组件:

  • 定义和支持提供者提供实现的加密服务的框架。该框架包括诸如java.security、 javax.crypto、javax.crypto.spec和 javax.crypto.interfaces.
  • 实际的提供者,例如Sun, SunRsaSign, SunJCE,它们包含实际的加密实现。

几个重要的类

重要的类:

引擎类,示例是 MessageDigestSignatureKeyFactoryKeyPairGeneratorCipher类。

介绍

架构

加密服务提供者CSP( Cryptographic Service Providers)

java.security.Provider是所有安全提供者的基类。每个 CSP 都包含此类的一个实例,其中包含提供者的名称并列出它实现的所有安全服务/算法。当需要特定算法的实例时,JCA 框架会查询提供者的数据库,如果找到合适的匹配项,则创建该实例。JDK默认的几个provider有(SunSunJSSESunJCESunRsaSign)。
provider是可用算法的数据库。
应用程序需请求特定类型的对象(例如 a MessageDigest)和特定算法或服务(例如“SHA-256”算法),可以如下:

md = MessageDigest.getInstance("SHA-256"); //按顺序获取:没有指定provider,会顺序取第一个,ProviderB
md = MessageDigest.getInstance("SHA-256", "ProviderC");//按指定providerC获取:,会取ProviderC,如果ProviderC没有该算法则会抛出异常

1.顺序获取
在这里插入图片描述

2.按指定provider获取
在这里插入图片描述

Provider实现

每个引擎类中的应用程序 API 方法通过实现相应服务提供者接口 (SPI) 的类路由到提供者的实现。每个 SPI 类都是抽象的。要为特定算法提供特定类型服务的实现,提供者必须继承相应的 SPI 类并提供所有抽象方法的实现。
如:提供者CSP3的com.foo.AESCipher类是一个SPI实现类,实现了CipherSpi接口。
对于 API 中的每个引擎类,通过调用引擎类中的 getInstance() 工厂方法来请求和实例化实现实例。

    import javax.crypto.*;

    Cipher c = Cipher.getInstance("AES");
    c.init(ENCRYPT_MODE, key);

这里应用程序需要一个“AES” javax.crypto.Cipher实例,而不关心使用哪个提供程序。
1、应用程序调用引擎类Cipher的getInstance(),JCA框架会找到第一个支持“AES”的Provider。
2、框架搜索每个Provider,最后在CSP3中找到合适的条目。
3、CSP3实现类com.foo.AESCipher,CipherSpi因此适合Cipher引擎类使用.
4、创建一个实例com.foo.AESCipher,并封装在一个新创建的实例中javax.crypto.Cipher,返回给应用程序。
5、当Cipher执行init()操作时,回路由调用AESCipher的engineInit()完成初始化

在这里插入图片描述

JCA概念

引擎类和算法

引擎类为特定类型的加密服务提供接口,独立于特定的加密算法或提供者。引擎提供:

  • 加密操作(加密、数字签名、消息摘要等),
  • 密码材料(密钥和算法参数)的生成器或转换器
  • 封装加密数据并可在更高抽象层使用的对象(密钥库或证书)
可用引擎类
  • SecureRandom:用于生成随机或伪随机数。
  • MessageDigest:用于计算指定数据的消息摘要(哈希)。
  • Signature:用密钥初始化,这些用于签署数据和验证数字签名。
  • Cipher:用密钥初始化,这些用于加密/解密数据。有多种类型的算法:对称批量加密(例如 AES)、非对称加密(例如 RSA)和基于密码的加密(例如 PBE)。
  • 消息验证码 (MAC):与 MessageDigests 一样,它们也生成哈希值,但首先使用密钥初始化以保护消息的完整性。
  • KeyFactory:用于将现有的不透明加密密钥类型Key转换为密钥规范(底层密钥材料的透明表示),反之亦然。
  • SecretKeyFactory:用于将现有的不透明加密密钥类型SecretKey转换为密钥规范(底层密钥材料的透明表示),反之亦然。SecretKeyFactorys 是专门 KeyFactory创建秘密(对称)密钥的 s。
  • KeyPairGenerator:用于生成适用于指定算法的新公钥和私钥对。
  • KeyGenerator:用于生成与指定算法一起使用的新密钥。
  • KeyAgreement: 由两方或多方用于商定并建立用于特定加密操作的特定密钥。
  • AlgorithmParameters:用于存储特定算法的参数,包括参数编码和解码。
  • AlgorithmParameterGenerator :用于生成一组适用于指定算法的算法参数。
  • KeyStore:用于创建和管理密钥库。密钥库是密钥的数据库。密钥库中的私钥具有与之关联的证书链,用于验证相应的公钥。密钥库还包含来自受信任实体的证书。
  • CertificateFactory:用于创建公钥证书和证书撤销列表 (CRL)。
  • CertPathBuilder:用于构建证书链(也称为证书路径)。
  • CertPathValidator:用于验证证书链。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值