ini文件在xml的强劲攻势下,似乎已到了退出舞台的时候,但是在某些简单的设置保存中,使用ini文件还是一个不错的选择。
譬如保存歌曲列表、用户名、密码等等,浏览器The world似乎也是用ini来保存很多信息,有时候我们不希望ini的信息被别人看到,那么就需要对其进行加密。
下面,小厮就这一话题展开。
思路是这样的,把将要写入ini的内容进行编码,使ini文件的内容为乱码,
在程序需要读取ini文件的内容时,在将其解码,然后读出,而这一编解码的算法只有程序员知道,所以ini文件的信息也就安全了。
说的详细一点就是这样的过程:
譬如可执行程序xiaosi.exe和配置文件xiaosi.ini都位于c:chatang下,xiaosi.ini的内容是乱码。
当运行程序xiaosi.exe时,程序在c:windowssystem32下创建另一个配置文件sige.ini(当然这个位置和文件名只有程序员一个人知道),
并对xiaosi.ini进行解码,解出的内容存入sige.ini中,之后xiaosi.exe对ini配置文件进行的所有读写操作都对sige.ini执行,
在xiaosi.exe程序退出时,将sige.ini的内容编码写入到xiaosi.ini中,然后将sige.ini删除。
下面说一下所谓的编解码算法(其实也称不上算法的,只是一个小运算而已)。
我们知道(A XOR B) XOR B =A XOR (B XOR B)=A XOR 0=A
所以,我们假设A为sige.ini的内容,
B为一个随机数,则A XOR B就是乱码,我们将其写入文件xiaosi.ini,
在读出文件的时候,再取xiaosi.ini的内容即A XOR B,再进行一次与B的异或操作,(A XOR B) XOR B=A,将A写入sige.ini中,即完成了解码操作。
下面开始写代码了。
Dim FileName1 As String '第一个文件
Dim FileName2 As String '第二个文件
Dim FileName3 As String '第二个文件
Dim arry() As Byte '用来读取文件的数组
FileName1 = App.Path + "sige1.ini"
FileName2 = App.Path + "xiaosi.ini"
FileName3 = App.Path + "sige2.ini"
'=============================
'读出sige1.ini的内容,进行编码
Open FileName1 For Binary As #1
ReDim arry(LOF(1) - 1) '重定义数组
Get #1, , arry() '取得第一文件的内容到数组
For i = 0 To LOF(1) - 1
arry(i) = "&H" & Hex(arry(i)) Xor &H58 '&H58当然可以是任意的数值
Next i
Close #1
'==================================
'编码后的内容(乱码)写入xiaosi.ini
Open FileName2 For Binary As #2
Put #2, , arry()
Close #2
'==================================
'读出xiaosi.ini的内容进行解码
Open FileName2 For Binary As #3
ReDim arry(LOF(3) - 1)
Get #3, , arry()
For i = 0 To LOF(3) - 1
arry(i) = "&H" & Hex(arry(i)) Xor &H58
Next i
Close #3
'==================================
'解码后的内容(乱码)写入sige2.ini
Open FileName3 For Binary As #4
Put #4, , arry()
Close #4
当然,以上只是进行的文件读写和编解码操作,至于程序本身其他的要求,将本代码插入程序需要的位置,即可实现。
写完了,看一下结果吧。