求助!用xor加密解密后不能回到源文件的三个问题!
VB初学者请教:
问题一、
s = RichTextBox1.Text
t = " "
For i = 1 To Len(s)
temp = Mid$(s, i, 1)
temp = Chr(Asc(temp) Xor 23)
t = t + temp
Next i
RichTextBox1.Text = t 加密解密后在文件末尾多出了“”两个字符?
问题二:如果把密匙23攺成一个三位整数的话(如231)会出现“错误7,内存溢出”指针指在“RichTextBox1.Text = t”为何?
问题三:上面的代码如果不用RichTextBox控件,用Text控件的话,
用 Open "nero.txt " For Input As x
Do While Not EOF(x)
Line Input #x, neirong
Text1.Text = Text1.Text & neirong & vbCrLf
Loop
Close #x
读到Text中,加密解密后会出现有的字符变成“”为何?
望朋友帮忙看看~谢谢
[解决办法]
要存数组里面....
用txtbox显示出来不一定转换的回去...有些字符是不显示的....xor以后可能会出现0的情况,要考虑到....
加密后最好放数组..
[解决办法]
s = RichTextBox1.Text
t = " "
For i = 1 To Len(s)
temp = Mid$(s, i, 1)
temp = Chr(Asc(temp) Xor 23)
t = t + temp
Next i
RichTextBox1.Text = t 加密解密后在文件末尾多出了“”两个字符?
================================================================
检查一下你的最后两个字符temp 是多少? 如果是0然后在XOR 23 ,依旧是23,是一个符号
如果多出来的是一个引号的话,那么有可能 temp XOR 23 = 34 ,请检查
[解决办法]
问题出在汉字上...
[解决办法]
给你个把字符串转化为BYTE数组 然后在把BYTE数组还原字符串的代码
先添加1个 text1控件 先在文本框中输入 字符串 点击窗口执行
Private Sub Form_Click()
Dim str1 As String, k() As Byte, s As String, t1 As Long, t2
str1 = Text1
k = jiami(str1)
For x = 1 To UBound(k)
t1 = k(x) Xor 231
If t1 > 127 Then
t2 = k(x + 1) Xor 231
s = s & Chr(t1 * 256 + t2)
x = x + 1
Else
s = s & Chr(k(x) Xor 231)
End If
Next
Print s
End Sub
Private Function jiami(str1 As String) As Byte()
Dim k() As Byte, ls As Long, x As Long, strfu As String
strfu = StrConv(str1, vbFromUnicode)
ls = LenB(strfu)
Print str1
ReDim k(1 To ls)
For x = 1 To ls
k(x) = AscB(MidB(StrConv(str1, vbFromUnicode), x, 1)) Xor 231
Next
jiami = k
End Function
[解决办法]
对于非可显字符, 把他仍到text里面在从text里面读出来是会丢失信息的。