本来是想自己写的,但怎样都不对头,晕.目的很简单,让写入文件的字符串别一眼就看出来了就行.定义如下:EnCodeStr(ByVal Str1 As String, ByVal EnCodeMode As Integer) As StringStr1是输入的字符串,EnCodeMode是开关,为1就是加密,其他值为解密.返回值为处理后的字符串.这个好象是不难.我也写出来了:Private Function EnCodeStr(ByVal Str1 As String, ByVal EnCodeMode As Integer) As String
Dim I As Long, TmpStr As StringFor I = 1 To Len(Str1)
If Mid(Str1, I, 1) = "," Then
TmpStr = TmpStr & ","
Else
TmpStr = TmpStr & Chr(Asc(Mid(Str1, I, 1)) + IIf(EnCodeMode = 1, 5, -5))
End If
Next IEnCodeStr = TmpStrEnd Function但是,在文件输出时有了问题.所加密的字符串放在了一个动态数组里,写入一个文件后,的确已经乱七八糟了.只是,在读入时,却无法正确地读入.我在想,是否是我的文件输入模式有问题?我用的是For Output来输出:Open cDlg.FileName For Output As #1使用的是For Input来输入:Open FileName For Input As #1问题是否在这里?
Dim I As Long, TmpStr As StringFor I = 1 To Len(Str1)
If Mid(Str1, I, 1) = "," Then
TmpStr = TmpStr & ","
Else
TmpStr = TmpStr & Chr(Asc(Mid(Str1, I, 1)) + IIf(EnCodeMode = 1, 5, -5))
End If
Next IEnCodeStr = TmpStrEnd Function但是,在文件输出时有了问题.所加密的字符串放在了一个动态数组里,写入一个文件后,的确已经乱七八糟了.只是,在读入时,却无法正确地读入.我在想,是否是我的文件输入模式有问题?我用的是For Output来输出:Open cDlg.FileName For Output As #1使用的是For Input来输入:Open FileName For Input As #1问题是否在这里?
解决方案 »
- vb从数据库统计数据赋值给文本
- 如何使用VBs在AD更新出错时处理有效的异常信息 并且错误信息保存在一个错误日志中去
- 怎样得到水晶报表总的记录条数?
- 能不能用VB写一个动态链接库文件
- 再问一下alicky(周松)!
- 如何让程序在输入法旁边生成快捷方式
- MDI窗体控制,如何判断当前有子窗体打开?急!
- 如何让ListView控件的图标显示在ListView控件右边????
- 每隔三行取出一條數據.怎麼辦?給出源碼.(sql2000 & access2000)
- 请教:在VB中,可否获得EXE所在的目录和当前目录?
- 请教 使用treeview时报错“Type misMatch”
- 紧急求助!webBrower 控件的“拒绝访问”问题
Do While Not EOF(1)
Line Input #1, TmpStr
TmpStr = Mid(TmpStr, 2, Len(TmpStr) - 2) '去掉首尾的引号
TmpStr = EnCodeStr(TmpStr, 2) '解密字符串.在这里出了问题.
'某些字符读出来是问号.
............ '省略N行代码 Loop
Close #1写入部分代码如下: Open cDlg.FileName For Output As #1
For I = 1 To UBound(ProgTypeList) '保存分类列表
Write #1, EnCodeStr(ProgTypeList(I), 1)
Next I
...........再省略N行代码
Close #1是否是文件I/O的方式不对?
Private j As Long
Private k As Long
Private a As Byte
Private b As Byte
Private M As Long
Private L As Long
Private CENKEY(255) As Byte
Private ADDTABLE(255, 255) As Byte
Private STATE(0 To 255) As BytePrivate Sub FILL_LINEAR()
Dim bCONST(0 To 255) As Byte
For M = 0 To 255
bCONST(M) = M
STATE(M) = bCONST(M)
Next M
End SubPublic Sub CEN(BYTEARRAY() As Byte, Optional ByVal PASSWORD As String)
If PASSWORD <> "" Then PREPARE_KEY PASSWORD
For L = 0 To UBound(BYTEARRAY)
i = ADDTABLE(i, 1)
j = ADDTABLE(j, STATE(i))
a = STATE(i): STATE(i) = STATE(j): STATE(j) = a
b = STATE(ADDTABLE(STATE(i), STATE(j)))
BYTEARRAY(L) = BYTEARRAY(L) Xor b
Next L
End SubPrivate Sub PREPARE_KEY(ByVal sKEY As String)
INITIALIZE_ADDTABLE
FILL_LINEAR
k = Len(sKEY)
For i = 0 To k - 1
b = Asc(Mid$(sKEY, i + 1, 1))
For j = i To 255 Step k
CENKEY(j) = b
Next j
Next i
j = 0
For i = 0 To 255
k = ADDTABLE(STATE(i), CENKEY(i))
j = ADDTABLE(j, k)
b = STATE(i): STATE(i) = STATE(j): STATE(j) = b
Next i
i = 0
j = 0
End SubPrivate Sub INITIALIZE_ADDTABLE()
Static BeenHereDoneThat As Boolean
If BeenHereDoneThat Then Exit Sub
For j = 0 To 255
For i = 0 To 255
ADDTABLE(i, j) = CByte((i + j) And 255)
Next i
Next j
BeenHereDoneThat = True
End SubPublic Function STRING_TO_BYTES(sString As String) As Byte()
STRING_TO_BYTES = StrConv(sString, vbFromUnicode)
End FunctionPublic Function BYTES_TO_STRING(bBytes() As Byte) As String
BYTES_TO_STRING = bBytes
BYTES_TO_STRING = StrConv(BYTES_TO_STRING, vbUnicode)
End Function
dim data() as byte
Data = STRING_TO_BYTES("slkadgjlsjdg;sdgl;jsda;gsdgsd")
CEN Data, "password"这时的DATA已是经过加密的,再
cen data,"password" 就是解密
Private j As Long
Private k As Long
Private a As Byte
Private b As Byte
Private M As Long
Private L As Long
Private CENKEY(255) As Byte
Private ADDTABLE(255, 255) As Byte
Private STATE(0 To 255) As BytePublic Function EnCode(ByVal Str As String, ByVal PwdCode As String) As String
Dim Data() As Byte
Data = STRING_TO_BYTES(Str)
CEN Data, PwdCode
EnCode = BYTES_TO_STRING(Data)
End FunctionPrivate Sub FILL_LINEAR()
Dim bCONST(0 To 255) As Byte
For M = 0 To 255
bCONST(M) = M
STATE(M) = bCONST(M)
Next M
End SubPrivate Sub CEN(BYTEARRAY() As Byte, Optional ByVal PASSWORD As String)
If PASSWORD <> "" Then PREPARE_KEY PASSWORD
For L = 0 To UBound(BYTEARRAY)
I = ADDTABLE(I, 1)
j = ADDTABLE(j, STATE(I))
a = STATE(I): STATE(I) = STATE(j): STATE(j) = a
b = STATE(ADDTABLE(STATE(I), STATE(j)))
BYTEARRAY(L) = BYTEARRAY(L) Xor b
Next L
End SubPrivate Sub PREPARE_KEY(ByVal sKEY As String)
INITIALIZE_ADDTABLE
FILL_LINEAR
k = Len(sKEY)
For I = 0 To k - 1
b = Asc(Mid$(sKEY, I + 1, 1))
For j = I To 255 Step k
CENKEY(j) = b
Next j
Next I
j = 0
For I = 0 To 255
k = ADDTABLE(STATE(I), CENKEY(I))
j = ADDTABLE(j, k)
b = STATE(I): STATE(I) = STATE(j): STATE(j) = b
Next I
I = 0
j = 0
End SubPrivate Sub INITIALIZE_ADDTABLE()
Static BeenHereDoneThat As Boolean
If BeenHereDoneThat Then Exit Sub
For j = 0 To 255
For I = 0 To 255
ADDTABLE(I, j) = CByte((I + j) And 255)
Next I
Next j
BeenHereDoneThat = True
End SubPrivate Function STRING_TO_BYTES(sString As String) As Byte()
STRING_TO_BYTES = StrConv(sString, vbFromUnicode)
End FunctionPrivate Function BYTES_TO_STRING(bBytes() As Byte) As String
BYTES_TO_STRING = bBytes
BYTES_TO_STRING = StrConv(BYTES_TO_STRING, vbUnicode)
End Function************************************************调用方法:STRING1 = EnCode(STRING2,PASSWORD)其中,STRING1用于存放加密/解密后的字符串,STRING2是欲加密/解密的字符串,PASSWORD是密码.