字符串加密和解密技术主要提供是对数据串的,该技术可以扩展应用到数据库数据加密(如口令库表中内容的加密)、网络通讯中的数据包加密,甚至数据文档的加密等。
字符串的加密主要采取以下几个步骤:
1、 通过VB字符串处理函数把数据串进行码制转化,对数据做基本变换。
2、 利用VB随机函数产生一个随机数,这是本文所论述的技术的关键。利用随机函数随即产生的数据,对数据进行加密加密从而实现数据加密结果的随机性。
3、 利用所产生的随机数对码制转换后的字符串做“异或 运算。
4、通过计算生成参数m和k,其中参数k由随机数参与运算所得到。
5、 把m和k作为参数,从给定数据串中取密文。
主程序的实现
在按钮中主要调用自定义加密函数和自定义解密函数把所输入的字符串做五次加密和五次解密的结果显示在列表框中,技术实现代码如下:
Private Sub Commandl-Click()
Dim i As Long
Dim s As String
Di m mystr As String
mystr=(TextI.Text)
For i=1 To 5
s—=encode(mystr)
List1.AddItem S
s= decode(s)
I.ist2.AddItem S
Next
End Sub
在这里通过一个五次循环,对字符串进行五次加密和解密,五次加密的结果都是不一样的,但五次解密后所生成的串 .都是原串,都是正确的。
加密技术的实现,程序如下:
Private Function encode(ByVal S As String)As String’加密
If Len(s)=0 Then Exit Function
Dim buff()As Byte
buff—=StrConv(s,vbFromUnicode)‘转化成Unicode码
Dim i As Long
Dim j As Byte
Dim k As Byte,m As Byte
Dim mstr As String :
M str= "!@ # $% 8L*()?> < + ~ ,.;’:ABCDEFGHI—JKLMNOPQRSTUVW XYZO123456789abcdefghijklmnopqrstuvwxyz” ‘定义密文,用来作为加密后所显示的字符 ;
Dim OUtS As String
i= UBound(buff)+ 1
OUtS=Space(2*i)‘定义字符变量并做初始化
Dim temps As String l
For i=0 To UBo und(buff)
Randomize Time‘随机函数初始化 j= CByte(5*(Math.Rnd())+ O)’最大产生的随机数只能是5,不能再大了,再大的话,就要多用一个字节
buf(i)=buff(i)Xor j‘利用随机数做异或运算
k= buff(i)Mod Len(mstr)‘求余数k(tt成参数K)
m =buff(i) Len(mstr)‘求商m(tt成参数m)
m —=m * 2 3+ j‘进一步对m做处理temps— Mid(mstr,k+ 1,1)+ Mid(mstr,m + 1,1)’把k和m作为参数从mstr中去密文
Mid(outs,2*i+ 1。2)=temps‘把所取到的密文存放在outs中
Next
encode—outs‘把加密后结果送给函数
End Function
在这里主要实现对字符串的加密。首先通过主程序把要加密的字符串传过来,通过VB函数把字符串进行码制转换,并存放在buff可变数组(缓冲区)中。Mstr是一个密文字符串。是加密后所显示的所有字符,这是编者指定的。用户可以自己指定。也可以设计文本框输入。这样就可以指定密文所使用的字符,也可以说是指定私人密钥,解密时。只有指定同样的字符申(或者说只有拥有这个私人密钥)才可以解密。另外,J是由VB随机函数所生成的数字,是随机的。J的随机性,致使加密结果是随机的。利用J和buff中码制转换后的数据做一次异或运算,并由运算后结果求余数和商进而得到参数k和m.并把n 利用J做进一步处理。得到k和m后,利用这两个参数从mstr密文串中取出密文字符,作为加密后的密文。
解密技术的实现,程序如下:
Private Function decode(ByVal S As String)As String ’解密,S中传递加密后的密文
On Error GoTo myERR
Dim i As Long
Dim j As Byte
Di m k As Byte
Di m m As Byte
Di m mstr As String
Mstr="!@ # $% 8L*()?> < + ~ ,.f’:ABCDEFGHI—JKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"
Dim tl As String,t2 As String
Dim buff()As Byte
Dim n As Long
n =0
For i=1 To Len(s)Step 2‘每次处理两个字符
tl=Mid(s,i,1)‘取第i个字符
t2=Mid(s,i+ 1,1)‘取第i+1个字符
k= InStr(1,mstr,t1)一1’判断字符在mstr中的位置
m =InStr(1,mstr。t2)一1’判断字符在mstr中的位置
j= m 2 3‘求商j(tk成参数j)
m = m— j*2 3‘求余数m(tt成参数m)
ReDim Preserve buff(n)
buff(n)=j*Len(mstr)+ k‘利用余数做异或运算,
buff(n)=buff(n)Xor m 生成原字符的Unicode码(两次异或运算恢复原样)
n = n + 1
Next
decode= StrConv(buff,vbUnicode)‘转换成加密前的原始字符
Exit Function
myERR:
decode=" "
End Function
该函数的算法是对加密算法的逆过程,从密文串成对取密文字符。判断密文字符在mstr中的位置。取出参数k和m。对m求出商和余数,利用余数再次做异或运算。从而得到加密前的原字符,既实现了解密功能。