java和go中的密码学(9)-引擎类认识

标签:密码学
发布时间:2018年10月21日 价值:20000.00 / 共识:29

本文部分片段参考官方文档:Java Cryptography Architecture (JCA) Reference Guide

由前文,我们了解了jdk中加密模块主要分为JCA和JCE两部分。这节我们主要介绍JCA和JCE中的主要引擎类。
所谓“引擎类”,是提供我们加解密服务的类,或者说是在我们自己的项目工程中提供给我们 加密服务调用的api 的类。可是有趣的是,这些引擎类大部分并不提供具体的密码算法的实现,这就涉及到Provider、SPI以及其中的历史缘由了(见下篇)。

JCA中主要的引擎类

主要是在java.security包中, 如下:

  • SecureRandom:用于生成随机或伪随机数字
  • MessageDigest:用于计算指定数据的消息摘要(散列)。
  • Signature:使用密钥初始化,这些签名用于签署数据并验证数字签名。
  • KeyFactory:用于将Key类型的现有不透明密钥转换为密钥规范(底层密钥材料的透明表示),反之亦然。
  • KeyPairGenerator:用于生成一对适用于指定算法的公钥和私钥。
  • KeyGenerator:用于生成与指定算法一起使用的新密钥。
  • AlgorithmParameters:用于存储特定算法的参数, 包括参数编码和解码
  • AlgorithmParameterGenerator:用于生成适合于指定算法的一组AlgorithmParameters。
  • KeyStore:用于创建和管理密钥库。密钥库是密钥的数据库。密钥库中的私钥具有与其关联的证书链,用于验证相应的公钥。密钥库还包含来自可信实体的证书。
  • CertificateFactory:用于创建公钥证书和证书吊销列表(CRL)。
  • CertPathBuilder:用于构建证书链(也称为证书路径)。
  • CertPathValidator:用于验证证书链。
  • CertStore:用于从存储库中检索证书和CRL。
    从上面这些引擎类,可以看出JCA(Java加密框架)中主要就是提供了4种服务:Digest、Key、Cert、Signature、Alogorithm。
    1) 对消息内容使用某种hash算法就可以生成Digest。
    2) 利用KeyFactory、KeyPairGenerator就可以生成公钥、私钥。
    3) 证书中心使用公钥就可生成Cert。
    4) 可以使用私钥和Digest就可以消息进行签名Signature。
    5) 不论是Digest、Key、Cert、Signature,都要使用到算法Algorithm。

JCE中主要的引擎类

主要是在javax.crypto,javax.crypto.spec和javax.crypto.interfaces包中,如下:

  • Cipher:用密钥初始化,用于加密/解密数据。存在各种类型的算法:对称批量加密(例如AES),非对称加密(例如RSA)和基于密码的加密(例如PBE)。
  • KeyAgreement:由两方或多方使用,商定和建立一个特定的密钥,用于特定的密码操作。
  • Mac: Message Authentication Codes ,与MessageDigests一样,它们也会生成散列值,但是首先使用密钥初始化以保护消息的完整性。
  • SecretKeyFactory:用于将SecretKey类型的现有不透明加密密钥转换为密钥规范(底层密钥材料的透明表示),反之亦然。 SecretKeyFactorys是特殊的只能创建密钥(对称)的KeyFactorys。
    截图:

小历史

你会发现,JCE只是简单提供了几个引擎类。
在JDK 1.4之前,JCE是一个非捆绑产品,因此这时期里,JCA和JCE是独立的组件。由于JCE现在捆绑在JDK中,所以区别变得不那么明显了。由于JCE使用与JCA相同的体系结构,所以JCE应该更适合作为JCA的一部分。
因此,总的来说,JCA包含JCE。
JDK中的JCA包含两个软件组件:

  • 定义和支持提供者为其提供实现的加密服务的框架。这个框架包含了诸如java.security,javax.crypto,javax.crypto.spec和javax.crypto.interfaces等软件包。见上述。
  • SunEC,SunRsaSign,SunJCE实际提供者都包含了具体的加密实现。如下图:

    tips:至于BC的Provider,则是java社区在上面Sun包中的Provider之外的开源实现,并且提供了更多、更新的密码算法,非常好用!。
  • 分享 收藏
0 条评论
  • 这篇文章暂无评论,赶紧评论一下吧~