随着个人数据保护意识的加强,编程人员都希望通过采用加密算法来增强所开发应用程序功能。这不仅需要每个编程人员都要掌握加密算法及其编程技巧,导致整个应用程序开发难度加大,同时也极大地增加了编程的工作量。基于此问题,我们探讨了在VB6.0中创建Actlve控件功能,设计与实现了一个基于对称加密算法与非对称加密算法通用加密控件,只要将控件嵌入编程环境,即可达到不用编写加密代码,而实现加密功能。
一、DES加密算法和RSA加密算法简介
DES加密算法通过密钥对64位的二进制信息进行加密,把明文的64位信息加密成密文的64位信息。由于DES加密算法是公开的,所以加密强度取决于密钥的保密程度,加密后的信息可用加密时所用的同一密钥通过求逆变换还原成对应的明文。
RSA加密算法的加密密钥叫做公开密钥,解密密钥叫做私人密钥。RSA的密钥生成是这样的:先找出p、q、r三个数,其中p,q是两个相异的质数,r是与(p-1)(q-1)互质的数,p、q、r这三个数便是私人密钥。进一步再找数m,使得rm==l mod (p-1) (q-1).这个m一定存在,因为r与(p-1)(q-1)互质,用辗转相除法可以求得,最后计算n= pq,m,n这两个数便是公开密钥。
二、含有DES和RSA两种加密算法的控件的设计与实现
在各类不同的加密算法中,DES加密算法和RSA加密算法是最具影响力的两种加密算法,如果在控件中能同时嵌入DES和RSA两种加密算法,则可以更有效地抵抗各种密码攻击,提高保密程度。在制作控件时,首先需要把含两种加密算法的VB程序在标准EXE工程中调试成功,其中最重要的是每种算法在VB中的程序实现。
1、DES加密算法在vb6.0的编程实现
DES加密算法数据流程的具体框架是不固定的,其一次迭代的具体流程可如下图所示。
本加密算法的编程实现首先要进行文件二进制形式的转化,因为DES加密算法就是对二进制形式进行加密处理的。数据处理前还必须解决密钥表的生成实现,而在加密运算中,乘积变换和模2运算的实现是比较困难的。
转化文件为二迸制形式的部分程序:
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函数将字符串转为二进制数组
For a;0 T0 55
KeySchedule(a)=KeyBin(m_PCl(a))
Next
乘积变换实现的部分程序:
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的编程实现
RSA加密算法的实现主要是公钥和私钥的随机生成,明文就是在此基础上的取模运算,算法流程如图所示。
随机生成公钥和私钥的部分程序:
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()函数是验证参数是否为素数。Euler()函数是利用公式求另一密钥,Mult0函数是验证sk或pk是否与pq为互素。
3、Act iveX控件的制作
在靠文件一菜单“新建工程”选项中,选择“ActiveX控件”,对弹出的名为Usercontrol设计窗口进行操作来建立ActiveX控件.先对已完成的标准EXE工程中的对象和代码进行复制,再编写UserControl的触发事件Initialize,然后对控件进行测试.为了能在设计中同时测试控件,需增加一个搿标准EXE"工程。在添加工程中建立一个标准EXE工程,与ActlveX工程组成一个工程组,将测试工程名设为TestProj ect.并把TestPrqject工程设为启动工程。此时,工具箱上就增加了一个名为UserControll的控件,最后生成相应的ocx文件。
信息保护已越来越受到人们的重视,很多应用程序的开发都需要设计加密功能。本设计含有RSA和DES加密算法的ActiveX控件可以在多种编程环境中直接加载引用,便捷地建立了高可靠性的加密保护,很好地解决了应用程序开发时加密算法设计和加密代码需重复编写的问题。
小知识之ActiveX控件
ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。