原理:
使用密码文本的Ascii值与原文本文件的Byte类型进行Xor异或运算进行加密,由于异或运算可逆,所以,再次使用密码文本的Ascii值与加密文本文件进行Xor运算,就可解密。 以二进制方式打开txt文件,将txt文件内容存入Byte型的动态数组中,动态数组的长度为Lof(文件号) 1.将密码文本中的每个字符转换为Ascii值,并存入另一个Byte型的动态数组中,数组的长度为Len(密码文本) 2.以二进制方式打开txt文件,读取txt文件内容存入Byte型的动态数组中。 3.使用上两步存入的密码数组与保存文件内容的数组进入Xor异或运算,然后将运算的结果保存至另一个新的动态数组中。 4.最后将存异或结果的变量的值存入文本文件中。 由于异或运算是可逆的,所以再次执行以上步骤,可对加密文件进行解密。
完整代码如下:
Dim databuff() As Byte '定义数组用于存放文件内容 Dim addbuff() As Byte '定义数组用于存放加密后的文件内容 Dim password() As Byte '定义数组用于存放密码的ASCII值 Dim filename As String Private Sub File1_Click() '单击文件时,显示文件内容 filename = Dir1.Path + File1.filename Text1.Text = filename If filename = "" Then Exit Sub Open filename For Binary As #1 ReDim databuff(LOF(1)) As Byte 'LOF(1)'计算文件的长字,以字节为单位 Get #1, , databuff '将文件中的字符读入到databuff数组中 Close #1 Text2.Text = StrConv(databuff, vbUnicode) End Sub
Private Sub Command1_Click() Dim j As Integer Dim password_len As Integer password_len = Len(Text3.Text) ReDim password(password_len) As Byte '把密码转化为ASCII码,即取出密码中的每个字符,将转化为ascii值存入password数组中 For i = 0 To password_len - 1 password(i) = Asc(Mid(Text3.Text, i + 1, 1)) 'mid返回指定数量的字符 ASC返回一个 Integer,代表字符串中首字母的字符代码。 Next If filename = "" Then Exit Sub Open filename For Binary As #1 '读取要加密的文件内容 ReDim databuff(LOF(1)) Get #1, , databuff Close #1 ReDim addbuff(UBound(databuff)) As Byte For i = 0 To UBound(databuff) If j >= password_len Then '循环使用密码 j = 0 Else j = j + 1 End If addbuff(i) = databuff(i) Xor password(j) '进行异或运算 Next Open filename For Binary As #1 '把加密后的内容写入文件 Put #1, , addbuff Close #1 Text1 = StrConv(addbuff, vbUnicode) '显示加密后的文件内容 Text2.Text = "" End Sub