青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 505  文章 - 1034  trackbacks - 0
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 921905
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜

DES算法及其在VC++6.0下的實現(xiàn)(上)
作者:航天醫(yī)學工程研究所四室 朱彥軍

下載本文示例源代碼

摘要:
本文介紹了一種國際上通用的加密算法—DES算法的原理,并給出了在VC++6.0語言環(huán)境下實現(xiàn)的源代碼。最后給出一個示例,以供參考。
關(guān)鍵字:DES算法、明文、密文、密鑰、VC;

本文程序運行效果圖如下:


正文:
當今社會是信息化的社會。為了適應(yīng)社會對計算機數(shù)據(jù)安全保密越來越高的要求,美國國家標準局(NBS)于1997年公布了一個由IBM公司研制的一種加密算法,并且確定為非機要部門使用的數(shù)據(jù)加密標準,簡稱DES(Data Encrypton Standard)。自公布之日起,DES算法作為國際上商用保密通信和計算機通信的最常用算法,一直活躍在國際保密通信的舞臺上,扮演了十分突出的角色。現(xiàn)將DES算法簡單介紹一下,并給出實現(xiàn)DES算法的VC源代碼。
DES算法由加密、解密和子密鑰的生成三部分組成。

一.加密

DES算法處理的數(shù)據(jù)對象是一組64比特的明文串。設(shè)該明文串為m=m1m2…m64 (mi=0或1)。明文串經(jīng)過64比特的密鑰K來加密,最后生成長度為64比特的密文E。其加密過程圖示如下:



DES算法加密過程
對DES算法加密過程圖示的說明如下:待加密的64比特明文串m,經(jīng)過IP置換后,得到的比特串的下標列表如下:

IP 58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

該比特串被分為32位的L0和32位的R0兩部分。R0子密鑰K1(子密鑰的生成將在后面講)經(jīng)過變換f(R0,K1)(f變換將在下面講)輸出32位的比特串f1,f1與L0做不進位的二進制加法運算。運算規(guī)則為:

f1與L0做不進位的二進制加法運算后的結(jié)果賦給R1,R0則原封不動的賦給L1。L1與R0又做與以上完全相同的運算,生成L2,R2…… 一共經(jīng)過16次運算。最后生成R16和L16。其中R16為L15與f(R15,K16)做不進位二進制加法運算的結(jié)果,L16是R15的直接賦值。

R16與L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16與L16合并后成的比特串,經(jīng)過置換IP-1后所得比特串的下標列表如下:
IP-1 40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25

經(jīng)過置換IP-1后生成的比特串就是密文e.。
下面再講一下變換f(Ri-1,Ki)。
它的功能是將32比特的輸入再轉(zhuǎn)化為32比特的輸出。其過程如圖所示:


對f變換說明如下:輸入Ri-1(32比特)經(jīng)過變換E后,膨脹為48比特。膨脹后的比特串的下標列表如下:

E: 32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 31

膨脹后的比特串分為8組,每組6比特。各組經(jīng)過各自的S盒后,又變?yōu)?比特(具體過程見后),合并后又成為32比特。該32比特經(jīng)過P變換后,其下標列表如下:

P: 16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25

經(jīng)過P變換后輸出的比特串才是32比特的f (Ri-1,Ki)。
下面再講一下S盒的變換過程。任取一S盒。見圖:

在其輸入b1,b2,b3,b4,b5,b6中,計算出x=b1*2+b6, y=b5+b4*2+b3*4+b2*8,再從Si表中查出x 行,y 列的值Sxy。將Sxy化為二進制,即得Si盒的輸出。(S表如圖所示)


至此,DES算法加密原理講完了。在VC++6.0下的程序源代碼為:

for(i=1;i<=64;i++)
m1[i]=m[ip[i-1]];//64位明文串輸入,經(jīng)過IP置換。
下面進行迭代。由于各次迭代的方法相同只是輸入輸出不同,因此只給出其中一次。以第八次為例:
//進行第八次迭代。首先進行S盒的運算,輸入32位比特串。
for(i=1;i<=48;i++)//經(jīng)過E變換擴充,由32位變?yōu)?8位
RE1[i]=R7[E[i-1]];
for(i=1;i<=48;i++)//與K8按位作不進位加法運算
RE1[i]=RE1[i]+K8[i];
for(i=1;i<=48;i++)
{
if(RE1[i]==2)
RE1[i]=0;
}
for(i=1;i<7;i++)//48位分成8組
{
s11[i]=RE1[i];
s21[i]=RE1[i+6];
s31[i]=RE1[i+12];
s41[i]=RE1[i+18];
s51[i]=RE1[i+24];
s61[i]=RE1[i+30];
s71[i]=RE1[i+36];
s81[i]=RE1[i+42];
}//下面經(jīng)過S盒,得到8個數(shù)。S1,s2,s3,s4,s5,s6,s7,s8分別為S表
s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
for(i=0;i<8;i++)//8個數(shù)變換輸出二進制
{
for(j=1;j<5;j++)
{
temp[j]=s[i+1]%2;
s[i+1]=s[i+1]/2;
}
for(j=1;j<5;j++)
f[4*i+j]=temp[5-j];
}
for(i=1;i<33;i++)//經(jīng)過P變換
frk[i]=f[P[i-1]];//S盒運算完成
for(i=1;i<33;i++)//左右交換
L8[i]=R7[i];
for(i=1;i<33;i++)//R8為L7與f(R,K)進行不進位二進制加法運算結(jié)果
{
R8[i]=L7[i]+frk[i];
if(R8[i]==2)
R8[i]=0;
}
其它各次迭代類似,可以依此類推。

DES算法及其在VC++6.0下的實現(xiàn)(下)
作者:航天醫(yī)學工程研究所四室 朱彥軍

《DES算法及其在VC++6.0下的實現(xiàn)(上)》中主要介紹了DES算法的基本原理,下面讓我們繼續(xù):

二.子密鑰的生成
64比特的密鑰生成16個48比特的子密鑰。其生成過程見圖:


子密鑰生成過程具體解釋如下:
64比特的密鑰K,經(jīng)過PC-1后,生成56比特的串。其下標如表所示:

PC-1 57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

該比特串分為長度相等的比特串C0和D0。然后C0和D0分別循環(huán)左移1位,得到C1和D1。C1和D1合并起來生成C1D1。C1D1經(jīng)過PC-2變換后即生成48比特的K1。K1的下標列表為:

PC-2 14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

C1、D1分別循環(huán)左移LS2位,再合并,經(jīng)過PC-2,生成子密鑰K2……依次類推直至生成子密鑰K16。
注意:Lsi (I =1,2,….16)的數(shù)值是不同的。具體見下表:

迭代順序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
左移位數(shù) 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1


生成子密鑰的VC程序源代碼
如下:

for(i=1;i<57;i++)//輸入64位K,經(jīng)過PC-1變?yōu)?6位	  k0[i]=k[PC_1[i-1]];

56位的K0,均分為28位的C0,D0。C0,D0生成K1和C1,D1。以下幾次迭代方法相同,僅以生成K8為例。
for(i=1;i<27;i++)//循環(huán)左移兩位
{
C8[i]=C7[i+2];
D8[i]=D7[i+2];
}
C8[27]=C7[1];
D8[27]=D7[1];
C8[28]=C7[2];
D8[28]=D7[2];
for(i=1;i<=28;i++)
{
C[i]=C8[i];
C[i+28]=D8[i];
}
for(i=1;i<=48;i++)
K8[i]=C[PC_2[i-1]];//生成子密鑰k8
注意:生成的子密鑰不同,所需循環(huán)左移的位數(shù)也不同。源程序中以生成子密鑰 K8為例,所以循環(huán)左移了兩位。但在編程中,生成不同的子密鑰應(yīng)以Lsi表為準。

 



三.解密

DES的解密過程和DES的加密過程完全類似,只不過將16圈的子密鑰序列K1,K2……K16的順序倒過來。即第一圈用第16個子密鑰K16,第二圈用K15,其余類推。
第一圈:

加密后的結(jié)果

L=R15, R=L15⊕f(R15,K16)⊕f(R15,K16)=L15
同理R15=L14⊕f(R14,K15), L15=R14。
同理類推:
得 L=R0, R=L0。
其程序源代碼與加密相同。在此就不重寫。

四.示例
例如:已知明文m=learning, 密鑰 k=computer。
明文m的ASCII二進制表示:

m= 01101100 01100101 01100001 01110010
01101110 01101001 01101110 01100111

密鑰k的ASCII二進制表示:

k=01100011 01101111 01101101 01110000
01110101 01110100 01100101 01110010

明文m經(jīng)過IP置換后,得:

11111111 00001000 11010011 10100110 00000000 11111111 01110001 11011000

等分為左右兩段:

L0=11111111 00001000 11010011 10100110 R0=00000000 11111111 01110001 11011000

經(jīng)過16次迭代后,所得結(jié)果為:

L1=00000000 11111111 01110001 11011000 R1=00110101 00110001 00111011 10100101
L2=00110101 00110001 00111011 10100101 R2=00010111 11100010 10111010 10000111
L3=00010111 11100010 10111010 10000111 R3=00111110 10110001 00001011 10000100
L4=00111110101100010000101110000100 R4=11110111110101111111101000111110
L5=11110111110101111111101000111110 R5=10010110011001110100111111100101
L6=10010110011001110100111111100101 R6=11001011001010000101110110100111
L7=11001011001010000101110110100111 R7=01100011110011101000111011011001
L8=01100011110011101000111011011001 R8=01001011110100001111001000000100
L9=01001011110100001111001000000100 R9=00011101001101111010111011100001
L10=00011101001101111010111011100001 R10=11101110111110111111010100000101
L11=11101110111110111111010100000101 R11=01101101111011011110010111111000
L12=01101101111011011110010111111000 R12=11111101110011100111000110110111
L13=11111101110011100111000110110111 R13=11100111111001011010101000000100
L14=11100111111001011010101000000100 R14=00011110010010011011100001100001
L15=00011110010010011011100001100001 R15=01010000111001001101110110100011
L16=01010000111001001101110110100011 R16=01111101101010000100110001100001

其中,f函數(shù)的結(jié)果為:

f1=11001010001110011110100000000011 f2=00010111000111011100101101011111
f3=00001011100000000011000000100001 f4=11100000001101010100000010111001
f5=10101000110101100100010001100001 f6=00111100111111111010011110011001
f7=11110101101010011100000100111100 f8=10000000111110001010111110100011
f9=01111110111110010010000000111000 f10=10100101001010110000011100000001
f11=01110000110110100100101100011001 f12=00010011001101011000010010110010
f13=10001010000010000100111111111100 f14=11100011100001111100100111010110
f15=10110111000000010111011110100111 f16=01100011111000011111010000000000

16個子密鑰為:

K1=11110000101111101110111011010000 K2=11100000101111101111011010010101
K3=11110100111111100111011000101000 K4=11100110111101110111001000011010
K5=11101110110101110111011100100110 K6=11101111110100110101101110001011
K7=00101111110100111111101111100110 K8=10111111010110011101101101010000
K9=00011111010110111101101101000100 K10=00111111011110011101110100001001
K11=00011111011011011100110101101000 K12=01011011011011011011110100001010
K13=11011101101011011010110110001111 K14=11010011101011101010111110000000
K15=11111001101111101010011011010011 K16=11110001101111100010111000000001

S盒中,16次運算時,每次的8 個結(jié)果為:
第一次:5,11,4,1,0,3,13,9;
第二次:7,13,15,8,12,12,13,1;
第三次:8,0,0,4,8,1,9,12;
第四次:0,7,4,1,7,6,12,4;
第五次:8,1,0,11,5,0,14,14;
第六次:14,12,13,2,7,15,14,10;
第七次:12,15,15,1,9,14,0,4;
第八次:15,8,8,3,2,3,14,5;
第九次:8,14,5,2,1,15,5,12;
第十次:2,8,13,1,9,2,10,2;
第十一次:10,15,8,2,1,12,12,3;
第十二次:5,4,4,0,14,10,7,4;
第十三次:2,13,10,9,2,4,3,13;
第十四次:13,7,14,9,15,0,1,3;
第十五次:3,1,15,5,11,9,11,4;
第十六次:12,3,4,6,9,3,3,0;

子密鑰生成過程中,生成的數(shù)值為:

C0=0000000011111111111111111011 D0=1000001101110110000001101000
C1=0000000111111111111111110110 D1=0000011011101100000011010001
C2=0000001111111111111111101100 D2=0000110111011000000110100010
C3=0000111111111111111110110000 D3=0011011101100000011010001000
C4=0011111111111111111011000000 D4=1101110110000001101000100000
C5=1111111111111111101100000000 D5=0111011000000110100010000011
C6=1111111111111110110000000011 D6=1101100000011010001000001101
C7=1111111111111011000000001111 D7=0110000001101000100000110111
C8=1111111111101100000000111111 D8=1000000110100010000011011101
C9=1111111111011000000001111111 D9=0000001101000100000110111011
C10=1111111101100000000111111111 D10=0000110100010000011011101100
C11=1111110110000000011111111111 D11=0011010001000001101110110000
C12=1111011000000001111111111111 D12=1101000100000110111011000000
C13=1101100000000111111111111111 D13=0100010000011011101100000011
C14=0110000000011111111111111111 D14=0001000001101110110000001101
C15=1000000001111111111111111101 D15=0100000110111011000000110100
C16=0000000011111111111111111011 D16=1000001101110110000001101000

解密過程與加密過程相反,所得的數(shù)據(jù)的順序恰好相反。在此就不贅述。

參考書目:

《計算機系統(tǒng)安全》 重慶出版社 盧開澄等編著
《計算機密碼應(yīng)用基礎(chǔ)》 科學出版社 朱文余等編著
《Visual C++ 6.0 編程實例與技巧》 機械工業(yè)出版社 王華等編著
posted on 2007-10-08 17:37 七星重劍 閱讀(1451) 評論(1)  編輯 收藏 引用 所屬分類: PL--c/c++Encrypt & Decrypt

FeedBack:
# re: DES算法及其在VC++6.0下的實現(xiàn) 2007-10-08 22:40 螞蟻終結(jié)者
不錯,比較詳細,有時間再看。  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久裸体视频| 91久久精品国产91性色tv| 国产精品美女| 亚洲欧美在线磁力| 亚洲伦理一区| 免费观看在线综合色| 欧美一级视频精品观看| 欧美一二区视频| 久久久国际精品| 欧美大片91| 亚洲美女免费精品视频在线观看| 日韩午夜在线视频| 亚洲一区三区电影在线观看| 欧美一区日韩一区| 欧美大片免费看| 国产精品豆花视频| 黄色成人在线网站| 99在线精品观看| 久久精品一区二区国产| 亚洲国产日韩一级| 亚洲性图久久| 老司机67194精品线观看| 欧美吻胸吃奶大尺度电影| 欧美激情在线播放| 亚洲国产精品电影在线观看| 一区二区三区欧美视频| 欧美在线综合| 91久久久国产精品| 欧美一区二区观看视频| 欧美日韩不卡| 亚洲二区在线| 欧美与欧洲交xxxx免费观看| 91久久久久久久久| 久久精品中文字幕一区| 欧美视频一区二区| 亚洲激情视频在线播放| 久久大综合网| 一区二区三区国产| 欧美国产先锋| 亚洲成人自拍视频| 欧美一区二区黄| 亚洲免费高清视频| 免费av成人在线| 黑人巨大精品欧美黑白配亚洲| 亚洲综合日本| 99re6热只有精品免费观看| 欧美不卡高清| 亚洲高清自拍| 欧美福利网址| 美日韩精品免费| 伊人久久大香线| 免费一区视频| 久久综合色88| 亚洲第一成人在线| 免费成人黄色片| 久久久av毛片精品| 国外成人性视频| 久久久久久黄| 久久gogo国模裸体人体| 国产一级揄自揄精品视频| 午夜精品一区二区三区在线视| 亚洲人成网站999久久久综合| 噜噜噜91成人网| 亚洲激情在线观看| 亚洲激情电影在线| 欧美日韩第一页| 亚洲一区二区三区精品动漫| 激情懂色av一区av二区av| 欧美一级片在线播放| 亚洲字幕一区二区| 久久免费视频在线观看| 模特精品裸拍一区| 亚洲大胆av| 欧美高清不卡| 欧美日韩91| 亚洲欧美乱综合| 欧美一级专区| 亚洲国产91精品在线观看| 亚洲国产成人久久综合一区| 欧美精品 国产精品| 亚洲一区高清| 欧美一区二区三区的| 激情成人在线视频| 亚洲一区二区免费视频| 亚洲欧美另类中文字幕| 亚洲一级特黄| 在线观看视频日韩| 亚洲日本理论电影| 国产精品久久久久77777| 久久精品盗摄| 女女同性女同一区二区三区91| 一本色道88久久加勒比精品| 亚洲免费中文字幕| 亚洲人永久免费| 亚洲一区二区在线视频 | 久久精品盗摄| 欧美成人午夜激情在线| 午夜精品av| 免费在线观看精品| 欧美中文字幕| 欧美人成在线视频| 老司机aⅴ在线精品导航| 欧美午夜一区| 亚洲福利小视频| 国产一区二区三区自拍| 亚洲理论电影网| 亚洲国产成人av在线| 亚洲一区二区黄色| 99国产一区| 久久久一本精品99久久精品66| 亚洲一区视频在线| 欧美国产日韩精品免费观看| 久久久久国产精品一区二区| 欧美日韩精品伦理作品在线免费观看 | 91久久极品少妇xxxxⅹ软件| 亚洲综合日本| 亚洲午夜在线视频| 欧美精品一区二区三区蜜臀 | 在线午夜精品自拍| 蜜臀av性久久久久蜜臀aⅴ| 久久激情五月丁香伊人| 国产精品高潮呻吟久久av黑人| 亚洲国产专区校园欧美| 亚洲高清视频在线| 久久男人资源视频| 玖玖综合伊人| 韩国一区二区三区美女美女秀| 亚洲欧美日产图| 香蕉久久a毛片| 国产精品看片资源| 亚洲一区二区欧美| 欧美一区二区视频网站| 国产精品一区免费在线观看| 一区二区三区高清不卡| 亚洲欧美国产制服动漫| 国产精品国产成人国产三级| 亚洲视频www| 欧美亚洲三区| 国产婷婷一区二区| 久久久999精品| 欧美激情视频在线播放| 亚洲精品激情| 欧美激情a∨在线视频播放| 正在播放欧美一区| 久久蜜桃资源一区二区老牛 | 亚洲一本大道在线| 国产亚洲福利一区| 欧美久久一区| 久久久久久久综合狠狠综合| 在线视频一区二区| 亚洲国产成人91精品| 久久久久九九视频| 亚洲欧美日韩国产综合在线| 亚洲片国产一区一级在线观看| 国产欧美在线看| 欧美午夜精品久久久| 美女在线一区二区| 久久精品在线免费观看| 亚洲在线免费视频| 在线亚洲国产精品网站| 亚洲欧洲一区| 欧美激情第4页| 久热re这里精品视频在线6| 久久国产精品网站| 欧美一区二区三区的| 午夜视频一区在线观看| 亚洲图片欧洲图片av| 一区二区免费在线视频| 日韩视频在线观看免费| 亚洲精品影院| 亚洲精品在线免费观看视频| 亚洲国产精品一区二区www在线| 国色天香一区二区| 黄色影院成人| 在线观看国产日韩| 亚洲国产精品一区| 日韩视频不卡| 正在播放日韩| 午夜精品久久久久久久蜜桃app| 亚洲一区二区三区四区在线观看 | 亚洲欧美www| 亚洲在线电影| 性欧美xxxx大乳国产app| 亚洲欧美一区二区原创| 翔田千里一区二区| 久久精品成人一区二区三区蜜臀| 久久精品国产第一区二区三区最新章节| 欧美亚洲综合另类| 久久国产精品99国产精| 久久综合免费视频影院| 欧美电影专区| 亚洲黄色在线看| 亚洲免费观看高清在线观看| 夜夜爽夜夜爽精品视频| 亚洲永久在线观看| 久久精品国产亚洲aⅴ| 免费在线亚洲欧美| 欧美视频在线播放| 国产亚洲精品bv在线观看| 亚洲东热激情|