Java 加密算法体系结构

来源:互联网 发布:15年股灾真相知乎 编辑:程序博客网 时间:2024/06/01 10:42

        加密API是Java基于java.security(及其子包)的API,用户能用密码学的概念(如数字签名和报文摘要),但又不必关心这些概念的实现甚至实现这些概念所用算法的   实现。

        当不可能完全实现算法独立性时,JCA 将为开发人员提供标准的特定算法 API。当实现方法的独立性不可能实现时,JCA 将让开发人员指明所要求的特定实现方法。


加密算法很难,我研究了好长时间,最终还是放弃了。搞不懂那些这样那样的公式,还是只会用就好了。



Java提供了以下7种引擎类(截止Java6.0)

  • MessageDigest — 用于计算数据的报文摘要(散列)。
  • Signature — 用于对数据进行签名和校验数字签名。
  •  KeyPairGenerator — 用于生成与指定算法相匹配的公钥和私钥对。
  • KeyFactory — 用于将类型为 Key(密钥)的不透明密钥转换为密钥规范(密钥信息的透明表示),反之亦然。
  • CertificateFactory 用于创建公钥证书和证书撤消清单(CRL)。
  • KeyStore — 用于创建和管理密钥仓库。密钥仓库是密钥的数据库。密钥仓库中的私钥有一个与之关联的证书链,用于认证对应的公钥。密钥仓库还含有来自可信实体的证书。
  •  AlgorithmParameters — 用于管理某一特定算法的参数,包括编码和解码参数。
  • AlgorithmParameterGenerator — 用于生成一组与指定算法相匹配的参数。
  • SecureRandom — 用于生成随机数或伪随机数。

 

每种引擎对应了一种或者几种加密算,获取对象的方法就是getInstance(算法名)。


Java已经实现的算法



1、MessageDigest  类

               摘要算法类

               提供的方法:update(byte input) 即更新摘要   reset()重置数据; digest()

       支持的算法:

        SHA: 安全散列算法,在安全散列标准 NIST FIPS 180-1 中定义。
        MD2: RFC 1319 中定义的 MD2 报文摘要算法。
        MD5: RFC 1321 中定义的 MD5 报文摘要算法。
        SHA1withDSA: 带 SHA-1 的 DSA 签名算法,它使用 SHA-1 digest 算法和 DSA 来创建和校验 FIPS PUB 186 中定义的 DSA 数字签名。
        MD2withRSA: 带 RSA 的 MD2 加密签名算法,它使用 MD2 digest 算法和 RSA 来创建和校验 PKCS#1 中定义的 RSA 数字签名。
        MD5withRSA: 带 RSA 的 MD5 加密签名算法,它使用 MD5 digest 算法和 RSA 来创建和校验 PKCS#1 中定义的 RSA 数字签名。
        SHA1withRSA: 带 SHA-1 的签名算法和在“OSI 的互操作性研讨会”上定义的签名算法,它使用 PKCS #1 中说明的填充约定。


2、Signature 类

      用来为应用程序提供数字签名算法功能。数字签名用于确保数字数据的验证和完整性。

在所有算法当中,数字签名可以是 NIST 标准的 DSA,它使用 DSA 和 SHA-1。可以将使用 SHA-1 消息摘要算法的 DSA 算法指定为 SHA1withDSA。如果使用 RSA,对消息摘要算法则会有多种选择,因此,可以将签名算法指定为 MD2withRSAMD5withRSASHA1withRSA。因为没有默认的算法名称,所以必须为其指定名称。

  1. 初始化,使用
    • 初始化验证签名的公钥(请参见 initVerify),或使用
    • 初始化签署签名的私钥(也可以选择“安全随机数生成器”),(请参见 initSign(PrivateKey)initSign(PrivateKey, SecureRandom))。
  2. 更新

    根据初始化类型,这可更新要签名或验证的字节。请参见 update 方法。

  3. 签署或验证所有更新字节的签名。请参见 sign 方法和 verify 方法。


3.、 KeyPairGenerator  类

KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。

有两种生成密钥对的方式:与算法无关的方式和特定于算法的方式。



4、KeyFactory  类

密钥工厂是双向的。也就是说,它们允许根据给定的密钥规范(密钥材料)构建不透明的密钥对象,也允许获取以恰当格式表示的密钥对象的底层密钥材料。

对于同一个密钥可以存在多个兼容的密钥规范。


5、CertificateFactory  类

 只支持x.509国际标准证书


6、KeyStore  类

此类表示密钥和证书的存储设施。

KeyStore 管理不同类型的条目。每种类型的条目都实现 KeyStore.Entry 接口


7、AlgorithmParameters 类

此类用作密码参数的不透明表示形式。

可以通过调用 getInstance 工厂方法(返回给定类的实例的 static 方法)之一获取用于管理特定算法的参数的 AlgorithmParameters 对象。


8、AlgorithmParameterGenerator 类

AlgorithmParameterGenerator 类用于生成将在某个特定算法中使用的参数集合。参数生成器是使用 getInstance 工厂方法(返回给定类的实例的 static 方法)构造的。

可以使用以下两种方式初始化将生成参数的对象:与算法无关的方式或特定于算法的方式


9、SecureRandom  类

此类提供强加密随机数生成器(RNG)。


 

 
    以上大部分翻译自官方文档,后面的东西今天懒的弄了,凑了下数,Java加密技术 推荐《Java加密与解密的艺术》。

附:博客:http://snowolf.iteye.com/blog/379860

0 0
原创粉丝点击