4.4 小结

受限于美国出口限制,我们获得的JDK(或JRE)本身不具备很高的加密强度。在当地的相应进出口政策允许的前提下,我们可以从Sun官方网站上下载相应的权限文件,在一定范围内提高JDK(JRE)的加密强度。

获得Sun官方网站提供的权限文件后,我们只需要在对应的目录下,进行权限覆盖即可。

Bouncy Castle作为一款开源加密组件,极大地丰富了Java世界的加密算法支持。

Sun提供了JCE框架用于支持各种加密算法。基于这个架构,Bouncy Castle提供了相应的安全提供者,扩展了Java 6所不支持的多种算法,如MD4、SHA-224、HmacMD4和HmacSHA-224等消息摘要算法,IDEA对称加密算法以及ECDSA数字签名算法。

使用Bouncy Castle提供者有两种方式:第一种是配置方式,修改JDK(JRE)环境,也就是修改%JDK_Home%\jre\lib\security\java.security文件(%JRE_Home%\lib\security\java.security文件),增加Bouncy Castle提供者;第二种是显示调用方式,在使用Bouncy Castle所提供的扩展算法时,先要在各种密钥工厂、密钥对生成器等引擎初始化前,使用Security类的addProvider()方法加入Bouncy Castle提供者。

两种方式各具优势:前者需要依赖环境,但代码十分简洁。开发者必须知道环境对这些扩展算法已支持,无须关注由谁提供。在做迁移时,如项目上线时需要注意相关环境配置;后者需要依赖代码修改,需要使用者十分清楚所需要的扩展算法如何使用及由谁提供。

从架构和开发的角度来考虑:前者属于架构层面,更注重整体;后者注重开发细节,注重单模块。读者需根据开发需求选择合理的实现方式。

对于Base64、十六进制转换算法,Bouncy Castle也提供了相应的支持。此外,Bouncy Castle提供了用于Url编码的UrlBase64类。

Commons Codec是国际开源组织Apache旗下的一款开源组件,提供了各种编码转换实现,如Base64、二进制、十六进制、语音等多种编码转换,并且在Sun提供的消息摘要算法的基础上做了进一步封装,提高了各种算法操作的易用性。

Commons Codec提供的Base64类除了完成一般Base64算法实现,同时实现了Url Base64算法实现。

鱼和熊掌不能兼得,请读者根据相应需求选择Bouncy Castle或Commons Codec。