购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 密码技术实践环境

为什么用Java语言来构建本书的实践环境?编者主要从两方面来考虑:第一个原因是现今大部分的电子商务、网银和地图等互联网App使用Java开发;第二个原因是Java本身易于理解,熟悉Java之后,再去了解其他语言的实现不是难事。

Java密码技术实践环境的搭建,主要涉及两个重要的框架,它们由Java开发工具集(Java Development Kit,JDK)提供。

第一个重要框架是Java密码体结构(Java Cryptography Architecture,JCA)。JCA是一个平台,它设计了一种完美的Provider体系架构,任何第三方都可以利用Provider来实现自己的密码算法和协议。JCA内置一组用于数字签名、消息摘要、证书管理与验证、数据加/解密和安全随机数及密钥生成等功能的实现方法;第二个重要框架是Java加密扩展(Java Cryptography Extension,JCE)。JCE是JCA的功能扩展和具体算法实现。由于历史原因,早期JDK版本的JCA框架是不包含具体密码实现方法的,JCE须作为单独的密码实现框架来安装。随着密码技术的发展和普及,JCE已经可以自由获得,程序员可以轻松自由地整合密码功能提供给应用使用了。JDK1.1版本以后的JCA框架就包含java.security、javax.crypto、javax.crypto.spec和javax.crypto.interfaces等功能强大的密码实现软件包,这些软件包在后续章节会逐一进行介绍。

JCA的安装非常重要,由于本书主要讨论我国商用密码技术的应用与实现,而目前商用密码算法在标准的Java JDK包中是不存在的,因此需要使用基于JCA框架的开源Provider实现库来实现。本书使用的是 轻量级密码技术包(Bouncy Castle,BC) ,开源代码网址为 http://www.bouncycastle.org/ ,读者可到该网站自行下载。本书下载的文件名称和版本为“bcprov-ext-jdk15on-165.jar”。除了BC库外,该网站还提供用于数字证书的PKI包、用于实现端到端安全的TLS包和OpenPGP包等不同功能的密码专用包下载。

2.1.1 直接将BC库添加到JRE环境

JRE(Java Runtime Environment)指Java运行环境,是运行Java程序所必需的环境的集合。JRE通常包含Java虚拟机和核心类库。常说的Java虚拟机(Java Virtual Machine,JVM)是整个Java实现跨平台的最核心部分。所有的Java程序首先被编译为.class类文件,这种类文件可以在虚拟机上执行。JVM不能单独实现.class的执行,解释.class的时候JVM需要调用解释所有需要的类库lib。在JDK下面的jre目录里有两个文件夹:bin和lib。可以认为,bin文件夹里就是JVM,lib文件夹里则是JVM工作所需的类库,而JVM和lib合起来就称为JRE。

直接将BC库添加到JRE环境的优点是应用代码不用添加BC显示引用,直接就可以用,应用的安装包更小。具体步骤如下。

1)找到Java运行环境中的JRE目录“\jre\lib\security\”,在该目录下有个配置文件“java.security”,用Notepad++等文本编辑工具打开该文件,找到安全服务提供者(security.provider)的位置。可以看到,security.provider是按照顺序进行排列的。

可以看到,当前JDK环境中的提供者provider的序号排到了第10号。在该段文字的后面添加上一行内容,使得BC密码库成为第11号security.provider。配置完成后的结果如下。

2)将“bcprov-ext-jdk15on-165.jar”文件复制到“\jre\lib\ext”目录下。

3)使用Eclipse Java开发工具查看JRE环境库中BC库是否被成功加载,如图2-1所示。

注意 :本节后面章节所有的实践代码均使用Eclipse开发工具编写,具体版本为eclipse-jee—2019-09-R-win32-x86_64。

●图2-1 Eclipse JRE的系统库环境

如果在Eclipse JRE系统库中可以看到BC库的jar包,就表示BC库添加成功了。

2.1.2 在项目工程中引用添加BC库

在项目工程中引用添加BC库的好处是,在应用部署时不需对Java运行环境JRE做任何变动,项目的可移植性更好。具体步骤如下。

1)打开Eclipse开发工具,找到项目的lib目录。如果没有这个目录,需要自行建一个lib目录,并把“bcprov-ext-jdk15on-165.jar”文件复制到该文件夹下,如图2-2所示。

●图2-2 Eclipse配置引用BC代码库

2)在Eclipse开发工具的包资源管理器的“bcprov-ext-jdk15on-165.jar”上右击,选择“构建路径”→“添加至构建路径”命令,如图2-3所示,将代码库添加到项目引用环境中。

●图2-3 将代码库添加到项目引用环境

添加完毕后,在包资源管理器中就会出现一个“引用的库”的虚拟目录,如图2-4所示。

●图2-4 Eclipse引用代码库虚拟目录

3)确认BC库是否添加成功。可以在“引用的库”的虚拟目录中看到“bcprov-ext-jdk15on-165.jar”,则表示已添加成功。

Java密码技术实践环境搭建好后,就可以使用JCA结合BC库来开始代码实现了。在开始编写代码前,还有两个事项要特别说明:第一,出于更直观地展示核心密码算法的考虑,在本书后续章节的所有代码示例中不包含import语句,如果使用Eclipse开发工具,这些语句在IDE环境下很容易被自动添加;第二,代码示例中并没有处理任何异常,因为这不是本书关注的重点。密码算法很多语句都会要求处理异常,这也是代码健壮性的一个基本要求。在方法上,throws抛出各种异常,如CertificateException、NoSuchProviderException、IOException等,再用try...catch语句来处理可能出现的异常。这些读者可以自行用Eclipse工具添加完成。 Pz20cKwNB+swvjL2RnDEYvQdririJvWkpK2PFAmLY9pmJElZY249mx8xS6IfFBbH

点击中间区域
呼出菜单
上一章
目录
下一章
×