DES和RSA加密算法不寫(xiě)程序代碼的加密方案

隨著個(gè)人數(shù)據(jù)保護(hù)意識(shí)的加強(qiáng),編程人員都希望通過(guò)采用加密算法來(lái)增強(qiáng)所開(kāi)發(fā)的應(yīng)用程序的保護(hù)功能。“加密”其實(shí)是雙刃劍,需要編程人員掌握加密算法及其編程技巧,將導(dǎo)致整個(gè)應(yīng)用程序開(kāi)發(fā)難度加大,增加了編程工作量?;诖?,我們探討了在VB6.0中創(chuàng)建ActiveX控件,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于對(duì)稱(chēng)加密算法與非對(duì)稱(chēng)加密算法的通用加密控件,只要將控件嵌入編程環(huán)境,即可達(dá)到不用編寫(xiě)加密代碼就可以實(shí)現(xiàn)加密的功能。

一、DES和RSA加密算法介紹

DES加密算法是通過(guò)密鑰對(duì)64位的二進(jìn)制信息進(jìn)行加密,即把明文的64位信息文件加密成密文的64位信息。由于DES加密算法是公開(kāi)的,所以加密強(qiáng)度取決于密鑰的保密程度。加密后
的信息可用加密時(shí)所用的同一密鑰通過(guò)求逆變換還原成對(duì)應(yīng)的明文。

RSA加密算法的加密密鑰叫做公開(kāi)密鑰,解密密鑰叫做私人密鑰。RSA的密鑰生成:先找出p、q、r三個(gè)數(shù),其中p,q是兩個(gè)相異的質(zhì)數(shù),r是與(p-1)(q-1)互質(zhì)的數(shù),p、q、r這三個(gè)
數(shù)便是私人密鑰。進(jìn)一步再找數(shù)m,使得r=1 mod (p-1)(q-1)。這個(gè)m一定存在,因?yàn)閞與(p-1)(q-1)互質(zhì),用輾轉(zhuǎn)相除法可以求得,最后計(jì)算n=pq,m,n這兩個(gè)數(shù)便是公開(kāi)密鑰。

二、含有DES和RSA兩種加密算法的控件設(shè)計(jì)與實(shí)現(xiàn)

在各類(lèi)不同的加密算法中,DES算法和RSA算法是最具影響力的兩種算法,如果在控件中能同時(shí)嵌入這兩種加密算法,則可以更有效地抵抗各種密碼攻擊,提高保密程度。在制作控件時(shí),首先需要把含有兩種加密算法的VB程序在標(biāo)準(zhǔn)EXE工程中調(diào)試成功,其中最重要的是每種算法在VB中的程序?qū)崿F(xiàn)。

1、DES在VB6.0的編程實(shí)現(xiàn)

DES算法數(shù)據(jù)流程的具體框架是不固定的,其一次迭代的具體流程如圖1所示。

DES和RSA加密算法不寫(xiě)程序代碼的加密方案

本加密算法的編程實(shí)現(xiàn)首先要進(jìn)行文件二進(jìn)制形式的轉(zhuǎn)化,因?yàn)镈ES加密算法就是對(duì)二進(jìn)制形式進(jìn)行加密處理的。數(shù)據(jù)處理前還必須解決密鑰表的生成實(shí)現(xiàn),而在加密運(yùn)算中,乘積變換和模2運(yùn)算的實(shí)現(xiàn)是比較困難的。部分實(shí)現(xiàn)如下所述。

轉(zhuǎn)化文件為二進(jìn)制形式的部分程序:

If (Not FileExist(SourccFilc)) Then

Call Err.Raise(vbObjcctError,,"Errorprocedurc (Sourcefik does not exist).’檢驗(yàn)原文件

End If

Filenr = FreeFile

Opcn SourccFile For Binary As #Filcnr

RcDim ByteArray(0 To LOF(Filcnr)-1)

Get #Filenr,,ByteArray()

Closc #Filenr

生成密鑰表的部分程序:

Public Propcrty Let kcy(New_Valuc As String)

If (m_KeyValuc=New_Value) thcn Exit Propcrty

m_ KeyValue=New_Value

Call Bytc2Bin(StrConv(New_Value~vbFromUnicodc),if(Len(New_Valuc)>8, 8, Len(New_Valuc)),

KcyBin())’轉(zhuǎn)為二進(jìn)制數(shù)組

Fora=0 T0 55

KcySchedulc(a) - KcyBin(m_PCl(a))

Next

乘積變換實(shí)現(xiàn)的部分程序:

Fori=l T0 16

ERxorK(O)=R(31) Xor m_Key(0,i)

ERxorK(I)=R(O) Xor m_Key(1,i)

ERxorK(2)-R(1) Xor m_Key(2,i)

ERxorK(3)-R(2) Xor m_Key(3,i)

ERxorK(4).R(3) Xor m_Key(4,i)

ERxorK(5);R(4) Xor m_Key(5,i)

.....

ERxorK(47)=R(O) Xor m_Kcy(47,i)

解密即為求逆變換。

2、RSA在VB6.O的編程實(shí)現(xiàn)

RSA的實(shí)現(xiàn)主要是公鑰和私鑰的隨機(jī)生成,明文就是在此基礎(chǔ)上的取模運(yùn)算,算法流程如圖2所示。

DES和RSA加密算法不寫(xiě)程序代碼的加密方案

隨機(jī)生成公鑰和私鑰的部分程序:

Public Sub GcnKcy()

Randomize

top:

p IRnd* 1000 \1

If IsPrimc(p)t False Then GoTo top

Sel_q:

q=Rnd * 1000\1

If IsPrime(q) = Falsc Then GoTo Sel_q

n=p*q\1

phi= (P-1)*(q-1)\1

d=Rnd *n\1

Ifd =0 or n=0or d=1 Then GoTo top

e= Euler(phi,d)

Elself Mult(x,d,n)1 255 Then

keys(1)=e

kcys(2)=d

keys(3)=n

End If

其中IsPrime()函數(shù)是驗(yàn)證參數(shù)是否為素?cái)?shù)。Euler()函數(shù)是利用公式求另一密鑰。

Mult0函數(shù)是驗(yàn)證sk或pk是否與pq為互素。

3、 ActiveX控件的制作

在“文件甜菜單“新建工程”選項(xiàng)中,選擇“ActiveX控件”,對(duì)彈出的名為Usercontrol設(shè)計(jì)窗口進(jìn)行操作來(lái)建立Acti,veX控件。先對(duì)已完成的標(biāo)準(zhǔn)EXE工程中的對(duì)象和代碼進(jìn)行復(fù)制,再編寫(xiě)UserControl的觸發(fā)事件Initialize,然后對(duì)控件進(jìn)行測(cè)試。為了能在設(shè)計(jì)中同時(shí)測(cè)試控件,需增加一個(gè)“標(biāo)準(zhǔn)EXE”工程。在添加工程中建立一個(gè)標(biāo)準(zhǔn)EXE工程,與ActiveX工程組成一個(gè)工程組,將測(cè)試工程名設(shè)為T(mén)estProject,并把TestProject工程設(shè)為啟動(dòng)工程。此時(shí),工具箱上就增加了一個(gè)名為UserControll.的控件,最后生成相應(yīng)的ocx文件。

三、控件的應(yīng)用實(shí)例

用VB編寫(xiě)一個(gè)檔案管理系統(tǒng),希望對(duì)文件進(jìn)行加密。文件加密工作只須把生成的ActiveX控件當(dāng)作一個(gè)類(lèi)的對(duì)象來(lái)引用,省去了編寫(xiě)加密代碼的煩瑣工作,很方便地實(shí)現(xiàn)了文件和數(shù)據(jù)的加密功能。此處以數(shù)據(jù)加密為例,來(lái)檢驗(yàn)加密和解密的效果。

當(dāng)選擇用DES加密算法時(shí),輸入“我是誰(shuí)”,加密后為“潭c人77摻M一齲?0?”,解密后為“我是誰(shuí)”。當(dāng)選擇用RSA算法時(shí),隨機(jī)生成公鑰和私鑰,輸入“who am I",加密后為“MzYyMSszNzEOKzM4MDYrMzA20SszMzAOKzM5NDErMzA20SsyMzU3",解密后為“who amI”。這說(shuō)明系統(tǒng)可以實(shí)現(xiàn)加密的功能。本控件的使用,明顯會(huì)使整個(gè)檔案管理系統(tǒng)
的開(kāi)發(fā)難度減小,也相對(duì)減輕了編程人員的工作量,所以本控件的制作,是有普遍意義的。

信息保護(hù)已越來(lái)越受到人們的重視,很多應(yīng)用程序的開(kāi)發(fā)都需要設(shè)計(jì)加密功能。本設(shè)計(jì)含有RSA和DES加密算法的ActiveX控件可以在多種編程環(huán)境中直接加載引用,便捷地建立了高可靠性的加密保護(hù),很好地解決了應(yīng)用程序開(kāi)發(fā)時(shí)加密算法設(shè)計(jì)和加密代碼需重復(fù)編寫(xiě)的問(wèn)題。

小知識(shí)之ActiveX控件

ActiveX是Microsoft對(duì)于一系列策略性面向?qū)ο蟪绦蚣夹g(shù)和工具的稱(chēng)呼,其中主要的技術(shù)是組件對(duì)象模型(COM)。在有目錄和其它支持的網(wǎng)絡(luò)中,COM變成了分布式COM(DCOM)。在創(chuàng)建包括ActiveX程序時(shí),主要的工作就是組件,一個(gè)可以自足的在A(yíng)ctiveX網(wǎng)絡(luò)(如今的網(wǎng)絡(luò)主要包括Windows和Mac)中任意運(yùn)行的程序。這個(gè)組件就是ActiveX控件。ActiveX是Microsoft為抗衡Sun Microsystems的JAVA技術(shù)而提出的,此控件的功能和java applet功能類(lèi)似。