加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以一个安全的方式生成数据对象(KeyStore或Certificate),封装(压缩)密钥(可以用于加密操作)。
Java Security API中,一个engine class就是定义了一种加密服务,不同的engine class提供不同的服务。下面就来看看有哪些engine class:
1)MessageDigest:对消息进行hash算法生成消息摘要(digest)。 2)Signature:对数据进行签名、验证数字签名。 3)KeyPairGenerator:根据指定的算法生成配对的公钥、私钥。 4)KeyFactory:根据Key说明(KeySpec)生成公钥或者私钥。 5)CertificateFactory:创建公钥证书和证书吊销列表(CRLs)。 6)KeyStore:keystore是一个keys的数据库。Keystore中的私钥会有一个相关联的证书链,证书用于鉴定对应的公钥。一个keystore也包含其它的信任的实体。 7)AlgorithmParameters:管理算法参数。KeyPairGenerator就是使用算法参数,进行算法相关的运算,生成KeyPair的。生成Signature时也会用到。 8)AlgorithmParametersGenerator:用于生成AlgorithmParameters。 9)SecureRandom:用于生成随机数或者伪随机数。 10)CertPathBuilder:用于构建证书链。 11)CertPathValidator:用于校验证书链。 12)CertStore:存储、获取证书链、CRLs到(从)CertStore中。
从上面这些engine class中,可以看出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。