3.7 小结

在本章内容的学习中,我们了解了有关Java安全领域的内容。它共分为三个部分:JCE(Java Cryptography Extension, Java加密扩展包)、JSSE(Java Secure Sockets Extension, Java安全套接字扩展包)、JAAS(Java Authentication and Authentication Service, Java鉴别与安全服务)。JCE和JSSE是本书中主要阐述的重点内容。

在安全提供者体系结构中,我们认识了Provider类和Security类,它们共同构成了安全提供者的概念。在Java 6版本中,共配置了9种安全提供者。它们均是Provider类的子类。Security类则用于管理这些提供者。

受军事出口的限制,密码算法的实现强度有所限制。如DES算法受出口限制,其密钥长度为56位,而实际上出于安全考虑则要求密钥长度为128位。这种安全强度已不能满足当前应用环境的需要。

在java.security包和javax.crypto包中,我们详述了如何构建对称密钥和非对称密钥,以及如何使用加密组件实现加密算法。

如Key接口,作为顶层密钥接口定义了密钥的基本操作。SecretKey、PublicKey和PrivateKey接口均是Key接口的子接口,分别定义了用于对称加密算法的秘密密钥和用于非对称加密算法的公钥/私钥。

我们可以通过相应的生成器和工厂类完成密钥的生成,如KeyGenerator和SecretKeyFactory用于秘密密钥的生成;KeyPairGenertor和KeyFactory用于公钥/私钥的生成。

通过Cipher及其扩展类CipherInputStream和CipherOutputStream,可以完成加密与解密算法的实现。通过Sinature类则可以完成签名与验证操作。

除此之外,我们还了解了消息摘要算法的两种实现方式:Mac类,用于实现安全消息摘要算法;MessageDigest类及其扩展类DigestInputStream和DigestOutputStream,用于实现一般消息摘要算法。

对于密钥管理,我们提到了KeyStore类。它将在密钥管理和证书管理的操作中,多次使用到。

在java.security.spec包和javax.crypto.spec包中主要详述如何通过密钥规范还原密钥对象。我们将会多次使用到这两个包中的实现。密钥通常以二进制的方式存储在文件中,通过这两个包中的实现我们将可以将二进制数据还原为秘密密钥、公钥和私钥对象。

在java.security.cert包中,我们主要详述了如何通过CertificateFactory类构建证书(Certificate)对象和证书撤销列表(CRL)对象。在获得证书对象后,我们可以获得相应的算法、公钥等信息。这将有助于我们完成相应的加密解密操作以及数字签名与验证操作。

在了解了上述与加密与解密算法相关的实现,以及与数字证书操作有关的实现内容后,我们来关注javax.net.ssl包中的内容。在这一节中,我们最终达到了通过证书构建基于HTTPS协议的加密网络通信。

Java是一门不断发展的语言,所涉及的领域越来越多。网络应用、电子商务等领域都促进着Java加密与解密技术的发展,我们将在今后的开发过程中更加频繁地使用到Java所提供的安全实现。