| | | | | | | [文章信息] | | | 作者: | 赵熙朝 | | 时间: | 2005-02-22 | | 出处: | 天极网 | | 责任编辑: | 方舟 | |
| [文章导读] | | | Java语言拥有三大特征:平台无关性、网络移动性和安全性…… | |
| |
|
| | | |
|
|
|
|
|
Java体系结构提供的安全API
Java体系结构提供了三类主要的安全API:Java 认证和授权服务(Java Authentication and Authorization Service,JAAS)、Java 安全套接字扩展(Java Secure Socket Extension,JSSE)和 Java 加密扩展(Java Cryptography Extension,JCE)。前面已经提到了安全管理器中用到的JAAS,这一节我们提到的是API主要指Java提供的对信息进行加密的Java加密扩展包JCE和Java安全套接字扩展包JSSE, 这些API提供了加密算法可以按照我们的需要,实现对任意数据的加密和解密。
Java加密扩展包JCE提供的是基于密钥的加密,它通过javax.crypto.Cipher类来实现数据加密合解密,加密解密的对象可以使程序中的数组对象,也可以是通过Java流接口读出或者写入的数据。使用Cipher类加密可以选择多种加密算法、加密模式和填补机制。加密算法JCE中提供了DES、多重DES、PBEWithMD5AndDES、RSA和Blowfish等等。DES是很多机构组织采用的数据加密标准;而多重DES使用多个DES密码进行多长DES加密,加大了攻击的难度但是也增加了加密解密过程说花的时间;PBEWithMD5AndDES前面提到过,主要是计算散列,然后对散列进行DES加密,来实现签名认证;RSA算法是1978年公布的一种分组加密算法,也是现在应用得最广泛的公钥密钥算法;Blowfish是由Bruce Schneier公布的一种加密算法,没有申请专利,并且公布了实现的代码,它适合不需要经常更换密钥的情况。
选择加密模式是为了对加密数据做进一步调整,从而增加解密难度,模式还可以将分组明文作为流明文进行处理,减少每次处理的数据量,JCE中提供了电子密码本模式ECB、密码封装链接模式CBC、密码反馈模式CFB和输出反馈模式OFB。电子密码本模式ECB是最简单的一种模式,只是对明文每8个字节进行分组,并且一次完成整个明文分组的加密,它适合对二进制数据流进行加密;密码封装链接模式CBC,把一个8字节的分组作为输入数据对另一组加密结果进行修正,这样可以把明文中包含的数据类型进行隐藏,这种模式可以对文本数据进行加密;密码反馈模式CFB,类似于CBC模式只是实现稍有不同,不同的是CBC模式需要明文分组来进行修正,而CFB需要的数据量小一些,并且长度可以进行调整;输出反馈模式OFB,适合那种加密数据在传输过程中有可能产生变化的情况,产生变化出错只会对这一位产生影响而不会影响整个分组。JCE可以选择两种填补机制PCKS5Padding和NoPadding,前者将对明文进行分组时候,如果字节数不够8的倍数就进行填充,保证数据的长度为一个完整的分组,而后者不对数据进行填充,当明文进行分组时候,字节数不够8的倍数会抛出一个异常。
Java安全套接字扩展包JSSE提供的是基于套接字之间传输的数据进行加密,它与JCE最大的不同就是数据的加密过程和传输过程是不分离的,如果说JAAS让我们可以识别应用程序提供者并限制他们只能访问授权使用的那部分系统,那么JSSE保证了我们应用程序传输的数据安全性。JSSE实现了SSL(安全套接字层)的加密,SSL作为HTTPS协议的基础,提供了在TCP套接字上对数据进行加密的方法,也是基于WEB应用最常用的一种加密方式。使用JSSE API首先我们需要建立SSL环境,SSL服务器端建立密钥库存放服务器私钥和验证身份的证书,而SSL客户端建立信任库验证信任的证书,密钥库和信任库都是通过JDK中keytool这个工具来进行管理;其次,我们需要从一个 JSSE 套接字工厂而不是直接从 java.net.Socket 类获得套接字,客户端代码从 SSLSocketFactory 获取套接字,而服务器端代码从 SSLServerSocketFactory 获取套接字;通过从这些工厂获取套接字,我们就可以利用 JSSE 提供程序提供的框架,而不是像 java.net 包允许我们所作的那样,简单地创建标准的、不安全的套接字。使用 JSSE,我们可以定义运行任意应用程序协议--包括 HTTP、TCP/IP、FTP,甚至 Telnet--的客户机与服务器之间的安全套接字连接。
总结:
信息的安全性是计算机领域必须重视和解决的问题,Java体系结构对信息安全的提供灵活而健壮框架,只要我们使用得当就能够很好的保证信息安全性,降低我们的代价和风险,同时我们也要加强一些其他相关的安全工作,比如保护好我们的私钥等等,这样才能保证Java安全框架发挥最大的作用。Java安全框架还有一些不足的地方,比如应用程序不断分配内存或者新建线程造成拒绝服务、将安全模型与系统用户进行映射等等,随着信息技术的不断发展,信息安全也会面临越来越大的挑战,这些都需要Java安全框架更加完善和进一步发展。
|
|
|
|
|
|
|
|
|