逐个对字符加5处理,但是提示类型不匹配。这个错在哪? Private Sub Command1_Click() Dim enstr As String enstr = encrypt("5", Text1.Text) Text2.Text = enstr End Sub Private Function encrypt(miyao As String, stext As String) As String Dim i As Integer Dim k As String '读取密钥 k = miyao Mod 255 '逐字节对文件进行加密 For i = 1 To Len(stext) stext = (Mid(stext, i, 1) + k) Mod 255 Next i encrypt = stext End Function encrypt = stext End Function
stext = (Mid(stext, i, 1) + k) Mod 255 Mid(stext, i, 1)是字符,怎么能够 + k 呢?
修改了你的程序,看看吧,不知能否是你满意。Option ExplicitPrivate Sub Command1_Click() Dim enstr As String enstr = encrypt(5, Text1.Text) Text2.Text = enstr End SubPrivate Function encrypt(miyao As Integer, stext As String) As String Dim i As Integer, k As Integer, s As String k = miyao Mod 255 '读取密钥 For i = 1 To Len(stext) '逐字节对文件进行加密 s = Chr((Asc(Mid(stext, i, 1)) + k) Mod 255) Mid(stext, i, 1) = s Next i encrypt = stext End Function
VB中有两套字符系统,前面那个程序仅适合英文字符系统,下面的程序可同时满足英汉两种字符 添加了Command2和Text3,用于将Text2中的密文解密至Text3, 密钥仍然用5,解密时用-5Option ExplicitPrivate Sub Command1_Click() Text2.Text = encrypt(5, Text1.Text) End SubPrivate Sub Command2_Click() Text3.Text = encrypt(-5, Text2.Text) End SubPrivate Function encrypt(miyao As Integer, stext As String) As String Dim i As Integer, s As String For i = 1 To Len(stext) '逐字节对文件进行加密 If Asc(Mid(stext, i, 1)) > 0 And Asc(Mid(stext, i, 1)) < 256 Then s = Chr((Asc(Mid(stext, i, 1)) + miyao) Mod 256) Else s = Chr((Asc(Mid(stext, i, 1)) + miyao) Mod 65536) End If Mid(stext, i, 1) = s Next i encrypt = stext End Function
Dim enstr As String
enstr = encrypt("5", Text1.Text)
Text2.Text = enstr
End Sub Private Function encrypt(miyao As String, stext As String) As String
Dim i As Integer
Dim k As String '读取密钥 k = miyao Mod 255 '逐字节对文件进行加密 For i = 1 To Len(stext) stext = (Mid(stext, i, 1) + k) Mod 255 Next i encrypt = stext End Function
encrypt = stext End Function
Mid(stext, i, 1)是字符,怎么能够 + k 呢?
Dim enstr As String
enstr = encrypt(5, Text1.Text)
Text2.Text = enstr
End SubPrivate Function encrypt(miyao As Integer, stext As String) As String
Dim i As Integer, k As Integer, s As String
k = miyao Mod 255 '读取密钥
For i = 1 To Len(stext) '逐字节对文件进行加密
s = Chr((Asc(Mid(stext, i, 1)) + k) Mod 255)
Mid(stext, i, 1) = s
Next i
encrypt = stext
End Function
添加了Command2和Text3,用于将Text2中的密文解密至Text3,
密钥仍然用5,解密时用-5Option ExplicitPrivate Sub Command1_Click()
Text2.Text = encrypt(5, Text1.Text)
End SubPrivate Sub Command2_Click()
Text3.Text = encrypt(-5, Text2.Text)
End SubPrivate Function encrypt(miyao As Integer, stext As String) As String
Dim i As Integer, s As String
For i = 1 To Len(stext) '逐字节对文件进行加密
If Asc(Mid(stext, i, 1)) > 0 And Asc(Mid(stext, i, 1)) < 256 Then
s = Chr((Asc(Mid(stext, i, 1)) + miyao) Mod 256)
Else
s = Chr((Asc(Mid(stext, i, 1)) + miyao) Mod 65536)
End If
Mid(stext, i, 1) = s
Next i
encrypt = stext
End Function
For i = -17950 To -17900
Text1.Text = Text1.Text & Chr(i)
Next得到 “光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈?????????????????????”
可见国字后第五个字符是空值,chr()函数返回的是 ?号。解密时,再取得 ?号前面的第五个字符就是 :号。问题出在winOS汉字系统编码表中,该表不连续,中间有很多null区段,显示时用传统ASC码的 ? 号替代null。看来,中文字符的处理还得费一点脑筋,也可能根本就无法解决。
可以先依次轉化為ASCII 碼. 再轉化為二進制.
再你自己黵認一個數進行異或運算, 這樣就得到了一個全新的字符串解碼時同理,