包含DES加密算法和RSA加密算法的ActiveX控件在VB中的設計與實現(xiàn)
隨著個人數(shù)據(jù)保護意識的加強,編程人員都希望通過采用加密算法來增強所開發(fā)應用程序功能。這不僅需要每個編程人員都要掌握加密算法及其編程技巧,導致整個應用程序開發(fā)難度加大,同時也極大地增加了編程的工作量?;诖藛栴},我們探討了在VB6.0中創(chuàng)建Actlve控件功能,設計與實現(xiàn)了一個基于對稱加密算法與非對稱加密算法通用加密控件,只要將控件嵌入編程環(huán)境,即可達到不用編寫加密代碼,而實現(xiàn)加密功能。
一、DES加密算法和RSA加密算法簡介
DES加密算法通過密鑰對64位的二進制信息進行加密,把明文的64位信息加密成密文的64位信息。由于DES加密算法是公開的,所以加密強度取決于密鑰的保密程度,加密后的信息可用加密時所用的同一密鑰通過求逆變換還原成對應的明文。
RSA加密算法的加密密鑰叫做公開密鑰,解密密鑰叫做私人密鑰。RSA的密鑰生成是這樣的:先找出p、q、r三個數(shù),其中p,q是兩個相異的質(zhì)數(shù),r是與(p-1)(q-1)互質(zhì)的數(shù),p、q、r這三個數(shù)便是私人密鑰。進一步再找數(shù)m,使得rm==l mod (p-1) (q-1).這個m一定存在,因為r與(p-1)(q-1)互質(zhì),用輾轉相除法可以求得,最后計算n= pq,m,n這兩個數(shù)便是公開密鑰。
二、含有DES和RSA兩種加密算法的控件的設計與實現(xiàn)
在各類不同的加密算法中,DES加密算法和RSA加密算法是最具影響力的兩種加密算法,如果在控件中能同時嵌入DES和RSA兩種加密算法,則可以更有效地抵抗各種密碼攻擊,提高保密程度。在制作控件時,首先需要把含兩種加密算法的VB程序在標準EXE工程中調(diào)試成功,其中最重要的是每種算法在VB中的程序?qū)崿F(xiàn)。
1、DES加密算法在vb6.0的編程實現(xiàn)
DES加密算法數(shù)據(jù)流程的具體框架是不固定的,其一次迭代的具體流程可如下圖所示。

本加密算法的編程實現(xiàn)首先要進行文件二進制形式的轉化,因為DES加密算法就是對二進制形式進行加密處理的。數(shù)據(jù)處理前還必須解決密鑰表的生成實現(xiàn),而在加密運算中,乘積變換和模2運算的實現(xiàn)是比較困難的。
轉化文件為二迸制形式的部分程序:
Fllenr=FreeFile
Open SourceFile For Blnary As iVFilenr
ReDlm ByteArray(0 To LOF(Filenr).1)
Get #Filenr,, ByteArray()
Close #Filenr
生成密鑰表的部分程序:
Public Property I.et key(New—Value As Strlng)
If (m_KeyValue=New_Value) Then Exit Property
m_KeyValue=New_Value
Call Byte2Bin(StrConv(New_Value,ybFromUnicode),lf(Len(New-. Value))8,8,Len(New_Value)), KeyBin0)'
ByteZBin函數(shù)將字符串轉為二進制數(shù)組
For a;0 T0 55
KeySchedule(a)=KeyBin(m_PCl(a))
Next
乘積變換實現(xiàn)的部分程序:
For i= IT0 16
ERxorK(0) = R(31) Xor m_Key(0, i)
ERxorK(I)= R(0) Xor m Key(1, i)
ERxorK(2) = R(1) Xor m Key(2, i)
FRxorK(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_Key(47,i)
解密即為求逆變換。
2、RSA加密算法在vb6.0的編程實現(xiàn)
RSA加密算法的實現(xiàn)主要是公鑰和私鑰的隨機生成,明文就是在此基礎上的取模運算,算法流程如圖所示。

隨機生成公鑰和私鑰的部分程序:
Public Sub GenKey()
Randomfze
top:
p= Rnd*1000\1
lf IsPrime(p)=False Then GoTo top
Sel_q:
q= Rnd*1000\1
If IsPrime(q)=False Then GoTo Sel_q
n=p*q\1
phf=(p-1)*(q-1)\1
d= Rnd*n\1
If d=0 Or n=0 0r d=1 Then GoTo top
e= Euler(phi,d)
Elself Mult(x,d,n)=255 Tben
keys(1)=e
keys(2)=d
keys(3)=n
End If
其中IsPrlme()函數(shù)是驗證參數(shù)是否為素數(shù)。Euler()函數(shù)是利用公式求另一密鑰,Mult0函數(shù)是驗證sk或pk是否與pq為互素。
3、Act iveX控件的制作
在靠文件一菜單“新建工程”選項中,選擇“ActiveX控件”,對彈出的名為Usercontrol設計窗口進行操作來建立ActiveX控件.先對已完成的標準EXE工程中的對象和代碼進行復制,再編寫UserControl的觸發(fā)事件Initialize,然后對控件進行測試.為了能在設計中同時測試控件,需增加一個搿標準EXE"工程。在添加工程中建立一個標準EXE工程,與ActlveX工程組成一個工程組,將測試工程名設為TestProj ect.并把TestPrqject工程設為啟動工程。此時,工具箱上就增加了一個名為UserControll的控件,最后生成相應的ocx文件。
信息保護已越來越受到人們的重視,很多應用程序的開發(fā)都需要設計加密功能。本設計含有RSA和DES加密算法的ActiveX控件可以在多種編程環(huán)境中直接加載引用,便捷地建立了高可靠性的加密保護,很好地解決了應用程序開發(fā)時加密算法設計和加密代碼需重復編寫的問題。
小知識之ActiveX控件
ActiveX是Microsoft對于一系列策略性面向?qū)ο蟪绦蚣夹g和工具的稱呼,其中主要的技術是組件對象模型(COM)。在有目錄和其它支持的網(wǎng)絡中,COM變成了分布式COM(DCOM)。










