随着计算机的普及,越来越多的信息以数字方式保存,为了让文件更加安全的传输及保存,最普遍的做法是对信息进行加密处理。传统的加密算法都采用单个进程来实现,虽然可以保证数据的安全,但在实际使用中会花费相当长的时间。我们将多线程技术引入DES加密算法,在不影响加密安全的前提下加快加密的速度。

一、DES加密算法简介

DES(Data Encryption Standard)加密算法具有较高的安全性,到目前为止,除了用穷举搜索法对DES加密算法进行攻击外,还没有发现更有效的办法。如果以106个/s的速度攻击DES加密,则它搜索完全部密钥就需要近2300a的时间,因此加密算法是比较安全的。

DES算法的入口参数有Key、Data和Mode。其中Key为64位,是DES算法的工作密钥;Data是被加密或被解密的数据,也是64位;Mode为DES的工作方式,有加密或解密两种方式。通信的发送端将数据分成每64bl组,不足64b的补零用Key逐1对每1组数据进行DES加密,经过加密的数据以密文的形式通过网络传输到终点后,用同样的Key对密码数据进行解密,再组合加密后的数据,这样,便保证了数据在公共通信网中传输的安全性和可靠性。在通信网络的源端和目的端通过定期同时改用新的Key,便能更进一步地增强数据的保密性。

二、多线程与加密

在实际使用过程中,我们发现,如果待加密的数据很多,加密将会消耗相当长的时间,加密1个100K的数据文档大约需要花费16s,数据量如果很大2采用DES加密的时间可能长到难以接受的程度。

而当前主流计算机的CPU以双核和4核居多,可以考虑在加密算法中采用多线程技术来提高加密的速度。多线程是为了同步完成多项任务,不是为了提高单个任务的运行效率,而是从提高资源使用效率的方面入手提高系统的效率。我们可以把加密拆分成多个子任务,虽然多线程不能提高单个子任务的效率,但是它提高了多个任务所组成的系统的效率。

DES加密算法本身将待加密的数据分成每64bl组,然后1组1组的进行加密,最后再组合每一组加密后的数据。我们将加密过程改进为由多个线程同时进行晗1,将需要加密的文件进行文件拆分,为每1个线程分配1个分文件,每个线程加密后生成一个临时文件,结束后,将所有的文件进行组合,生成加密文件。

在拆分文件之前,需要了解文件长度,如果文件太短(一般小于64b),则没有必要进行多线程技术处理,可以直接进行文件的加密运算。启动N个进程进行运算,将拆分好的数据取出N分交给N个进程进行计算。

生成每一块加密临时文件,一定要确保其次序不乱,以保证解密后文件的正确性。

三、程序设计

在Windows XP和VC+ +6.0环境下调试程序,编写1个beginthread函数,用它创建1个子线程。程序从主线程开始运行,运行到调用be-ginthread函数时,系统为新创建的线程分配1个运行时栈,启动1个新的线程用于数据的加密,并允许原线程和新线程继续运行。启动N个线程后,将分组后的数据交给每1个进程进行加密,同时使用多
线程对数据进行加密。所有的线程完成加密运算后,需要给出返回值,以便让程序继续运行,主线程必须等待所有线程完成加密运算,这样做的目的是为了避免出现错误,让所有的临时文件都可以创建完成。加密完成后,使用DOS命令将生成的临时文件合并,并保证合并的过程不会出错。

四、数据分析

我们对1组数据文件进行加密,然后,通过采集和分析数据,估算多线程技术对DES加密算法的运算结果。

1、数据收集

程序运行的PC机是Intel Pentium 4,CPU是1.7 GHz、1.69 GHz,256 M内存。

在VC+ +6.0工程中设置多线程模式,按照界面提示输入。此次采集,我们使用加密模式,输入加密文本1.txt,保存文本2.txt,密码是123,启动IO个线程。用程序加密1个100 K的文本文件,并让文本中的文字随机化,更加有利于分析。加密此文件的结果如表1所示(时间单位为s)。

DES加密算法之多线程技术加密

运行中CPU的状态如图1所示,图中峰值(平台期)即为程序运行时的CPU占用率。该图表明:在多线程状态下,CPU得到了充分的使用。解密的算法和加密是一样的,所以,这里我们就不再进行解密的数据统计了。

DES加密算法之多线程技术加密

2、数据分析

在理论上,数据分布服从正态分布规律,假设总体的置信水平是0.95 (95%),由所收集的数据可以得到各次运行的平均值x和标准方差Sn-1,如表1所示。其置信区间由公式F±tc/2,n- STIU2得到,其中to.05/2 (10)=2.228 1,计算区间结果如表2所示。

DES加密算法之多线程技术加密

取区间(14. 9387,14.5851)的平均值14.7619为单个线程的执行时间,再让程序按1个线程的模式运行3次,时间分别为16.3750,16.3130,16.2810s;加权平均后的结果是16.2320s。由于每个线程的参数不同,所以,程序中没有设置互斥机制,每1个线程均按照自己的方式由操作系统调动运行,计时系统也是只统计程序在加密时的时间数据,所以,认为得到的时间可以反映程序的执行时间。

在10个线程的情况下,我们可以粗略估计并行的执行效率是串行的(14.7619×10/16.232)=9倍。实际运行时,如果是目前主流的双核或者4核CPU,加密的效率应当会高于9倍。

小知识之多线程技术

采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。