原理:
使用密码文本的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