第4章 他山之石,可以攻玉
在第3章中,我们了解了Java 6中与加密/解密相关的API,几乎各种常用加密算法都能找到对应的实现,但还是难免会有遗憾:受出口限制,密钥长度上不能满足需求;部分算法未能支持,如MD4、SHA-224等算法;API使用起来还不是很方便;一些常用的进制转换辅助工具未能提供,如Base64编码转换、十六进制编码转换等工具。
对于上述这些问题,该如何解决呢?他山之石,可以攻玉!
对于出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。但幸运的是,Sun在官方主页上提供了替换文件,可减少相关的限制。当然,你需要结合本地进出口政策,合法使用该文件。
对于Java 6未能支持的加密算法,各大密码学机构以及以加密算法为核心的软件组织和软件公司都不遗余力地研究,并提供了相应的实现。但因为版权问题,我们很少能够使用到这些机构提供的加密软件包。在这样一个开源的时代,难道就没有其他的替代方案吗?当然不是,Bouncy Castle(http://www.bouncycastle.org/)提供了一系列算法支持实现,并可以跻身于JCE框架之下,以提供者的方式纳入其中。而且,Bouncy Castle是一款开源组件,你不必为版权问题而伤脑筋。此外,Bouncy Castle提供了Base64和十六进制编码转换相关的实现。
Commons Codec(http://commons. apache.org/codec/)是国际开源组织Apache(http://www.apache.org/)旗下的一款开源软件。它与Bouncy Castle不同,并未对Java 6提供扩展加密算法。仅仅是对Java 6提供的API做了改进,提供了更加易用的API。
4.1 加固你的系统
鉴于出口限制问题,我们得到的JDK安全强度不够高,主要是密钥长度不够。对于这一点,Sun在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),我们只需要将其部署在JRE环境中。
如果你所在的国家或地区不受该进出口限制,就完全可以使用该文件解除权限限制问题。
4.1.1 获得权限文件
Sun在其下载页面(http://java.sun.com/javase/downloads/index.jsp)上提供了该权限文件的下载地址,如图4-1所示,注意Other Downloads项。
图 4-1 权限文件下载页面
Other Downloads项提供了Java Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Files 6的下载地址。很显然,它的版本是6,对应Java 6。下载后,会得到一个名为jce_policy-6.zip的文件。用WinRAR打开后,如图4-2所示。
图 4-2 jce_policy-6.zip文件中jce目录列表
在这个压缩包中仅有一个目录,也就是jce目录。该目录中包含了4个文件:README.txt、COPYRIGHT.html、local_policy.jar和US_export_policy.jar。其中包含的两个jar文件正是此次配置中用到的文件。