DES加密算法的VC程序?qū)崿F(xiàn)
DES加密算法是將64位的明文文件加密成64位的密文文件,這樣使用起來并不是很方便,在本文中,在DES加密算法的基礎(chǔ)上,可以實(shí)現(xiàn)任何格式、任何大小的文件的加解密。方便了技術(shù)人員的使用。那么接下來就給大家介紹一下DES加密算法的VC程序?qū)崿F(xiàn)過程。
DES加密算法的VC程序?qū)崿F(xiàn)
一、DES加密算法的VC程序?qū)崿F(xiàn)的基本思路
用VC實(shí)現(xiàn)DES加密算法的主流程圖如下:

二、DES加密算法的VC程序的主要實(shí)現(xiàn)
1、變量的初始化及函數(shù)說明
DES加密算法中有大量的數(shù)據(jù)需要初始化,如置換表、擴(kuò)展置換表、S-盒等。由于各個(gè)步驟的運(yùn)算涉及變量較多,變量的定義和初始化,宜采用靜態(tài)的數(shù)組形式,為了提高程序的運(yùn)算速度和可讀性,盡可能采循環(huán)結(jié)構(gòu)。如ip[64]代表ip置換,sbox[8][64]代表s-盒的置換表,其他的表示也用類似的表示。
2、DES加密算法的各個(gè)環(huán)節(jié)的實(shí)現(xiàn)
在DES加密函數(shù)DESEN函數(shù)里要實(shí)現(xiàn)以下幾個(gè)方面的功能:
m1經(jīng)過IP置換的源代碼:
for(i=0;i<64;i++)//m1存放的是64位的明文信息
m2[i]=m1[ip[i-1]//m2
存放的是明文經(jīng)過ip置換后的信息最后使由DES得到的密文經(jīng)過一次運(yùn)算
for(i=0;i<64;i++)//c2存放的是經(jīng)過ip逆置換后的密文信息
c2[i]=c1[fini[i-1];
①f函數(shù)實(shí)現(xiàn)部分ech(in32,out48)//將32位擴(kuò)展成48位exeor(out48,keyi,xor48);
//將擴(kuò)展后的48位與第i個(gè)子密鑰異或后放到xor48數(shù)組sboxch(xor48,bout32);
//進(jìn)行s-box置換轉(zhuǎn)化ptran(bout32,f32);
//經(jīng)過p置換后得出參與迭代的32比特
②子密鑰的實(shí)現(xiàn)Des:keyson(char*key,bitaeeay*subkey){
//生成子密鑰char*cb28,*db28,*kb48;
//分別代表ci、diintc;pc1ch(key,&cb28,&db28);
//將64的密鑰經(jīng)過pc1置換分成兩個(gè)28位的c、d部分for(c=0;c<16;c++)
{
leftshift(&cb28,ls[c]);
//將c部分循環(huán)左移leftshift(&db28,ls[c]);
//將d部分循環(huán)左移pc2ch(cb28,db28,&kb48);
//經(jīng)過pc2置換得到第c個(gè)子密鑰
}
}
通過以上的VC程序,我們就可以通過DES加密算法實(shí)現(xiàn)對64位明文的字節(jié)流進(jìn)行加密。解密過程類似,只不過將16位的子密鑰的順序顛倒過來。
3、對文件的加解密
在原來DES加密算法的基礎(chǔ)上,增加了以下2個(gè)模塊,并對其功能模塊加以說明。
(1)明文文件加密模塊DES:
對desEncrypt函數(shù)進(jìn)行說明:desEncrypt函數(shù)用DES加密算法對文件infile進(jìn)行加密,加密密文存入文件outfile。infile代表的是要加密的文件名的指針。outfile是存放加密文件的文件名指針,如果文件存在,就覆蓋其內(nèi)容,否則,就創(chuàng)建它。key是加密或解密的密鑰,長度可以任意長,但是最好要超過6位,這樣比較安全。在desEncrypt函數(shù)中,要加密的文件是通過選擇路徑得到,這個(gè)一般情況下,是可以保證infile文件的存在。為了避免加密過的文件再次被加密,可以在加密的過程中,向密文內(nèi)容的最初幾個(gè)字符加入指定的文字。當(dāng)加密文件時(shí),判斷文件頭八個(gè)字符是否為指定字符,是的話,則是加密過的,不用再加密了。首先,每次讀64個(gè)字節(jié)的數(shù)據(jù),如果文件的長度不足64個(gè)字節(jié)的,則一次就讀完。接下來調(diào)用上述的DES EN函數(shù)進(jìn)行加密,每次加密后的密文存放在outfile中。
(2)密文文件解密模塊DES:
desEncrypt函數(shù)用DES解密算法對文件INFILE進(jìn)行解密,解密后的存放在文件outfile中。Infile是要解密的文件名的指針。outfile是存放解密后文件的文件名指針。如果文件存在,就覆蓋其內(nèi)容,否則,就創(chuàng)建它。key是加密或解密的密鑰。在desDecrypt函數(shù)里,先判斷文件infile里的頭八個(gè)字符是否為制定字符,是的話,就進(jìn)行解密,否則,還未加密。每次都讀64個(gè)字節(jié)的密文,如果不足64個(gè)字節(jié),則一次就讀完。然后調(diào)用上述的DESde函數(shù)進(jìn)行解密,每次解密后都存放在outfile中。
利用上述的加密算法實(shí)現(xiàn),我們就很容易實(shí)現(xiàn)各種格式的文件或字符的加解密。
DES加密算法的實(shí)現(xiàn)方法很多,用VC來實(shí)現(xiàn)主要是因?yàn)閂C的可視化很強(qiáng),能夠開發(fā)出視窗的加解密軟件,可以很方便的供用戶加密他們需要保密的文件,用戶不需要掌握專業(yè)知識(shí)。
小知識(shí)之DES加密算法:
DES加密算法為密碼體制中的對稱密碼體制,又被成為美國數(shù)據(jù)加密標(biāo)準(zhǔn),是1972年美國IBM公司研制的對稱密碼體制加密算法。其密匙長度為56位,明文按64位進(jìn)行分組,將分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。









