用开源实现Solaris到Server2008的加密

来源:ccw 作者:曹江华
  

  一、跨平台技术简介

  在java之前,跨平台是很痛苦的事情,主要是因为所有对于系统的调用,在不同的操作系统下结果都不一样,简单的来说,int的长度在不同操作系统里面就不一样,甚至于连字节排列的顺序都不同。调用同一个函数返回的格式也不同,因此,写程序的人自己要对不同的系统非常了解,如果真的需要对不同操作系统进行兼容,要在程序里面写很多if,编译的时候要先判断使用的操作系统,创造很多环境变量才能编译,而且编译好的二进制可执行文件只能在本系统上运行。如果你写的是个功能库供别人调用的,那么光对操作系统的判断就占了代码的绝大部分,而且,还要你在不同平台下进行测试,这可是个艰苦卓绝的工作。建议你有空可以看看apache httpd服务器的源代码就知道了。 自从有了java之后,就把操作系统兼容的工作丢给了jvm了,对于程序员来说就再也不要关心int有几位,还有高位在前还是地位在前的问题了,你只要用java的代码把你程序的逻辑实现出来就可以了,这些兼容的问题就交给jvm去处理吧。这样,如果你写一个程序交付给客户使用,如果客户的环境是运行AIX的,你就不需要在本地也装一个AIX来开发和运行,你可以在windows上完成所有的开发,然后把编译好的文件交给客户就可以了,以后有别的客户需要在Solaris上运行这个程序,你都不用修改,直接拿过去就可以运行,这难道不是一种方便吗?只有被跨平台开发折磨过的人才能更深得体会到用java开发跨平台应用的优势。

  二、密码技术简介

  使消息保密的技术和科学叫做密码编码学,从事此行的人叫密码编码者。破译密文的技术和科学就是密码分析学,从事此行的人是密码分析者。作为数学的一个分支的密码学包括密码编码学和密码分析学,精于此道的人称为密码学家,现代的密码学家通常也是理论数学家。

  密码学要实现的基本功能

  数据加密的基本思想是通过变换信息的表示形式来伪装需要保护的敏感信息,使非授权者不能了解被保护信息的内容。网络安全使用密码学来辅助完成在传递敏感信息时的相关问题,主要包括以下几个方面。

  1.机密性(confidentiality)

  仅有发送方和指定的接收方能够理解传输的报文内容。窃听者可以截取到加密了的报文,但不能还原出原来的信息,及不能知道报文内容。

  2.鉴别(authentication)

  发送方和接收方都应该能证实通信过程所涉及的另一方确实具有他们所声称的身份,即第三者不能冒充跟你通信的对方。

  3.报文完整性(messageintergrity)

  即使发送方和接收方可以互相鉴别对方,但他们还需要确保其通信的内容在传输过程中未被改变。

  4.不可否认性(non-repudiation)

  如果我们收到通信对方的报文后,还要证实报文确实来自所宣称的发送方,发送者事后不可能虚假地否认他发送的消息。这些功能是通过计算机进行社会交流至关重要的需求,就像面对面交流一样。某人是否就是他说的人;某人的身份证明文件(驾驶执照、医学学历或者护照)是否有效;声称从某人那里来的文件是否确实从那个人那里来的;这些事情都是通过鉴别、完整性和抗抵赖来实现的。

  加密算法术语

  明文:即原始的或未加密的数据。通过加密算法对其进行加密,加密算法的输入信息为明文和密钥。

  密文:明文加密后的格式,是加密算法的输出信息。加密算法是公开的,而密钥则是不公开的。密文不应理解为无密钥,它用于数据的存储以及传输。

  明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。对计算机而言,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为:

  E(M)=C

  相反地,解密函数D作用于C产生M。D(C)=M。先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:

  D(E(M))=M

  另外要明确的概念是算法和密钥。密码算法也叫密码,是用于加密和解密的数学函数(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)。

  三、使用java语言的加密解密工具WizCrypt

  无论是在Linux还是Windows操作系统平台,商用或免费的加密软件非常多。但同时在Linux和Windows中,都能快速地、自由地实现加解密的开源软件就不多见。下面就介绍如何快速实现跨平台的文件加解密。本文介绍的工具WizCrypt是使用java语言编写的所以可以通过安装Java虚拟机跨平台使用。 WizCrypt加密解密原理和流程如图1

  

                          图1 是WizCrypt加密的流程

  1. 首先WizCrypt是基于命令行的,通过密码文件对原文件进行加密,使用md5加密算法。

  2. 加密文件的前16位字节包括MD5的 hash值。

  3. 然后利用用户输入新的密码进行RC4算法加密并且输出。

  WizCrypt的解密的流程:

  1. 用户提供的MD5的 hash值首先进行计算。

  2. 把hash值和加密文件的前16位字节进行比对。

  3. 如果两者相同,则进行解密;否则提示用户并且自动退出。

 两个加密算法简介

  Md5算法:

  MD5的全称是Mess

  age-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。

  RC4加密算法

  RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。 RC4算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。根据目前的分析结果,没有任何的分析对于密钥长度达到128位的RC4有效,所以,RC4是目前最安全的加密算法之一,RC2是一种以64位连续的比特数据为单位的分组密码,而RC4则是一种单位数据不定的流密码。

  到此为止笔者介绍了数据加密技术下面我们将介绍WizCrypt加密在Solaris下和Windows下的实战。

  四、安装JDK

  1 windows server 2008下安装JDK

  如果客户端使用的是微软的Windows Server 2008操作系统,在下载页面上:http://www.java.com/zh_CN/download/index.jsp 下载安装JDK 6.0 ,该软件包中已经包含了所有所需的软件。即名为:jdk-6u2-windows-i586-p.exe的文件,下载以后,点击进行安装。安装过程非常简单笔者就不赘述了。图2 是安装完成界面。

  

  图2 JDK在Windows Server 2008安装完成界面

  2 本文使用的Solaris 11 简介

  Solaris 11 即Solaris Express Developer Edition ,SXDE是完全免费的,每个季度发布一个新的版本,适合作为应用程序开发环境。SXDE不仅包括了Solaris 10操作系统的所有特性(例如DTrace、Container、ZFS),还包括了众多尚未包括在Solaris 10操作系统中的新特性(例如最新的无线网卡驱动、USB热插拔支持、经过改进的桌面)以及Sun 公司发布的开发工具(例如NetBeans 6.0、Sun Studio 12)。

  SXDE 是Solaris 的最新的开发版本,目前是Solaris 11,它是开发版本。solaris 10 5/08是Solaris 10 update 5版本。在此之前Solaris 10已经有GA, U1,U2,U3,U4版本。概念类似于Windows的service pack。就是增加一些心特性和修补一些bug。目前只要是10,就是稳定版本。Solaris 10和11的差别就和Linux 2.4和2.5的差别一样。11是还没有正式 release的版本。

  获得SXDE软件方法:到Sun 公司网站上免费下载, 网址是http://developers.sun.com/sxde/download.jsp 。下载时请注意你要下载的版本是x86 的还是SPARC 的,另外这里只有DVD格式的iso文件,如图3。

  

                                            图3获得SXDE软件

  下载后解压缩后使用copy命令合并文件。

  Solairs 11在安装完成后会预装JDK的。可以用命令ps -ef|grep java来查看java进程是否已经启动。

  # ps -ef|grep java

  noaccess 722 1 0 14:29:15 ? 0:12 /usr/java/bin/java -server -Xmx128m -XX:+BackgroundCompilation -XX:PermSize=32m

  root 953 1 0 14:31:25 ? 0:04 /usr/bin/java -jar /usr/lib/patch/swupna.jar -wait

  root 1050 1046 0 14:39:45 pts/4 0:00 grep java

  测试一下:

  首先运行java -version 命令,

  您应该会看到一些有关java版本的信息类似如下内容:

  # java -version

  java version "1.6.0_01"

  Java(TM) SE Runtime Environment (build 1.6.0_01-b06)

  Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)如图4 。

  

                             图4 测试java版本信息

  也可以要访问sun的 Web 站点运行此测试小应用程序:

  http://www.java.com/zh_CN/download/help/testvm.xml

  如果您可以看到鸭子徽标图像的动画,则表示已成功安装并配置了JDK。

 五、开始使用WizCrypt软件进行文件加密和解密

  1 选择相应的WizCrypt版本

  WizCrypt主页提供了许多版本的WizCrypt程序。

  首先必须根据自己的JRE环境下载相应的文件。JDK 1.5 系列可以使用 1.0 和1.1 。JRE 1.6 系列可以使用 2.0和2.2 。下载网站:http://wizcrypt.wiztools.org/download.html

  说明:这里笔者使用的是jar格式的数据包。JAR(Java存档文件)是一种与平台无关的文件格式,它是将许多文件合并成一个文件。在只有HTTP(超文本传输协议)的信息处理中,可先将多个Java applet小程序及其必需组件(类文件、图像、声音及其它资源)捆绑到一个JAR文件中,然后再依次下载到浏览器上。该格式还支持文件压缩和数字签名功能。一个 JAR 文件可以用于:用于发布和使用类库 、作为应用程序和扩展的构建单元 、作为组件、applet 或者插件程序的部署单位、用于打包与组件相关联的辅助资源。

  2 了解wizcrypt命令行参数

  wizcrypt是一个命令行工具,它的格式非常简单。使用命令

  wizcrypt-2.2-jar-with-dependencies.jar

  即可查看参数,如图 5 。

  

                                         图5 WizCrypt 参数

  WizCrypt 参数包括:

  - f:强制覆盖文件。

  -d :进行解密操作。

  -e :进行加密操作。

  -p :输入密码。

  -h: :显示帮助信息。

  -v:显示版本信息。

  3 Windows Server 2008 应用实例

  我们看一个实例,users目录下有一个txt文件。只要使用命令即可进行加密。

  java -jar wizcrypt-2.2-jar-with-dependencies.jar -e -p ak47* 2008.txt

  说明:说明:其中ak47* 即密码,使用dir命令可以看到2008.txt 会被文件2008.txt。wiz代替。图6是加密操作的截图。

  使用命令进行解密。

  java -jar wizcrypt-2.2-jar-with-dependencies.jar -d -p ak47* 1.txt.wiz

  

                                图6 加密操作的截图

  4 在Solaris下的操作完全相同

  例如root目录下有一个jpeg文件。只要使用命令即可进行加密。

  java -jar wizcrypt-2.2-jar-with-dependencies.jar -e -p ak47* 1.jpg

  解密命令:

  java -jar wizcrypt-2.2-jar-with-dependencies.jar -d -p ak47* 1.jpg.wiz

  图7 是加密和解密操作的截图

  

                                图7solaris平台加密和解密操作的截图

  5 了解一下WizCrypt出错信息

  使用WizCrypt

  会出现一些常见错误信息,如表-1 。

  表-1 WizCrypt出错信息

  错误代码

  显示信息

  说明

  1、Error in IO

  IO 错误,发生读写磁盘错误或者文件不存在。

  2、Invalid password

  密码错误。密码太短或者过长。

  3、Password mismatch

  密码不匹配。

  4、Multiple exceptions

  以上几种错误同时存在。

  5、Security Exception

  安全提示,使用J2RE1.4版本时候。

  6、Parse Exception

  命令输入错误。

  0

  Clean Exit

  自动退出,即无错误

  文件在Winodws下的Solaris下的相互传递可以提供SSH安全工具进行完成。常用的Winodws下SSH客户端软件包括putty和winscp 。Solaris下SSH客户端软件包括Sftp和gftp 。图8 Winodws下SSH客户端软件包括winscp工作界面,而图 9是Solaris下SSH客户端软件gftp的工作界面。

  如图-8 。

  

        图8 Winodws下SSH客户端软件包括winscp工作界面

  WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。同时支持SCP协议。它的主要功能就是在本地与远程计算机间安全的复制文件。这是一个中文版的介绍。使用WinSCP可以连接到一台提供SFTP (SSH File Transfer Protocol)或SCP (Secure Copy Protocol)服务的SSH (Secure Shell)服务器,通常是UNIX服务器。SFTP包含于SSH-2包中,SCP在SSH-1包中。两种协议都能运行在以后的SSH版本之上。WinSCP同时支持SSH-1和SSH-2。 WinSCP通过构建于ssl或ssh2安全认证的客户机/服务器系统进行传输,为vpn、wan、extranet开发管理人员提供最经济的解决方案。

  安装gftp

  # pkg_get –i gftp

  使用gftp

  在命令栏目输入:/opt/csw/bin/gftp-gtk即可。如图9。

  

            图 9是Solaris下SSH客户端软件gftp的工作界面

  总结:通常使用的网络传输程序FTP和Telnet等在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,黑客利用嗅探器非常容易截获这些口令和数据。SSH的英文全称是Secure SHell。通过使用SSH,用户可以把所有传输的数据进行加密,这样即使网络中的黑客能够劫持用户所传输的数据,如果不能解密的话,也不能对数据传输构成真正的威胁。另外,传输的数据是经过压缩的,所以可以加快传输的速度。到此为止笔者介绍了数据加密技术和WizCrypt加密在solaris 下和Windows下的跨平台实战。

(责任编辑:A6)


时间:2008-06-11 11:15 来源:ccw 作者:曹江华 原文链接

好文,顶一下
(0)
0%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量