DES加密算法是将64位的明文文件加密成64位的密文文件,这样使用起来并不是很方便,在本文中,在DES加密算法的基础上,可以实现任何格式、任何大小的文件的加解密。方便了技术人员的使用。那么接下来就给大家介绍一下DES加密算法的VC程序实现过程。

DES加密算法的VC程序实现

一、DES加密算法的VC程序实现的基本思路

用VC实现DES加密算法的主流程图如下:

DES加密算法的VC程序实现

二、DES加密算法的VC程序的主要实现

1、变量的初始化及函数说明

DES加密算法中有大量的数据需要初始化,如置换表、扩展置换表、S-盒等。由于各个步骤的运算涉及变量较多,变量的定义和初始化,宜采用静态的数组形式,为了提高程序的运算速度和可读性,尽可能采循环结构。如ip[64]代表ip置换,sbox[8][64]代表s-盒的置换表,其他的表示也用类似的表示。

2、DES加密算法的各个环节的实现

在DES加密函数DESEN函数里要实现以下几个方面的功能:

m1经过IP置换的源代码:

for(i=0;i<64;i++)//m1存放的是64位的明文信息

m2[i]=m1[ip[i-1]//m2

存放的是明文经过ip置换后的信息最后使由DES得到的密文经过一次运算

for(i=0;i<64;i++)//c2存放的是经过ip逆置换后的密文信息

c2[i]=c1[fini[i-1];

①f函数实现部分ech(in32,out48)//将32位扩展成48位exeor(out48,keyi,xor48);

//将扩展后的48位与第i个子密钥异或后放到xor48数组sboxch(xor48,bout32);

//进行s-box置换转化ptran(bout32,f32);

//经过p置换后得出参与迭代的32比特

②子密钥的实现Des:keyson(char*key,bitaeeay*subkey){

//生成子密钥char*cb28,*db28,*kb48;

//分别代表ci、diintc;pc1ch(key,&cb28,&db28);

//将64的密钥经过pc1置换分成两个28位的c、d部分for(c=0;c<16;c++)

{

leftshift(&cb28,ls[c]);

//将c部分循环左移leftshift(&db28,ls[c]);

//将d部分循环左移pc2ch(cb28,db28,&kb48);

//经过pc2置换得到第c个子密钥

通过以上的VC程序,我们就可以通过DES加密算法实现对64位明文的字节流进行加密。解密过程类似,只不过将16位的子密钥的顺序颠倒过来。

3、对文件的加解密

在原来DES加密算法的基础上,增加了以下2个模块,并对其功能模块加以说明。

(1)明文文件加密模块DES:

对desEncrypt函数进行说明:desEncrypt函数用DES加密算法对文件infile进行加密,加密密文存入文件outfile。infile代表的是要加密的文件名的指针。outfile是存放加密文件的文件名指针,如果文件存在,就覆盖其内容,否则,就创建它。key是加密或解密的密钥,长度可以任意长,但是最好要超过6位,这样比较安全。在desEncrypt函数中,要加密的文件是通过选择路径得到,这个一般情况下,是可以保证infile文件的存在。为了避免加密过的文件再次被加密,可以在加密的过程中,向密文内容的最初几个字符加入指定的文字。当加密文件时,判断文件头八个字符是否为指定字符,是的话,则是加密过的,不用再加密了。首先,每次读64个字节的数据,如果文件的长度不足64个字节的,则一次就读完。接下来调用上述的DES EN函数进行加密,每次加密后的密文存放在outfile中。

(2)密文文件解密模块DES:

desEncrypt函数用DES解密算法对文件INFILE进行解密,解密后的存放在文件outfile中。Infile是要解密的文件名的指针。outfile是存放解密后文件的文件名指针。如果文件存在,就覆盖其内容,否则,就创建它。key是加密或解密的密钥。在desDecrypt函数里,先判断文件infile里的头八个字符是否为制定字符,是的话,就进行解密,否则,还未加密。每次都读64个字节的密文,如果不足64个字节,则一次就读完。然后调用上述的DESde函数进行解密,每次解密后都存放在outfile中。

利用上述的加密算法实现,我们就很容易实现各种格式的文件或字符的加解密。

DES加密算法的实现方法很多,用VC来实现主要是因为VC的可视化很强,能够开发出视窗的加解密软件,可以很方便的供用户加密他们需要保密的文件,用户不需要掌握专业知识。

小知识之DES加密算法:

DES加密算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密匙长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。