关于汉字或字符用ascii转码加密的问题~~
最近想编一个字符加密的程序,字符中有汉字,英文字母还有特殊字符等等,什么都可能有代码如下:
新建2个text文本框,一个按钮
Private Sub Command1_Click()
a = Text1.Text
For i = 1 To LenB(a)
b = b & ChrB(AscB(MidB(a, i, 1))+1) '加密时,对ascii码值加1,转回密文
Text2.Text = b
Next
For i = 1 To LenB(b)
c = c & ChrB(AscB(MidB(b, i, 1))-1) '解密时,对ascii码值减1,转回原文
Text2.Text = c
Next
End Sub
对正常的汉字和英文字母转换时不会出错,如“我舞他ASDDD”
但是如果有特殊符号就会出错,如全角的 “¥%…—#·—”,
请高手帮忙~~~ --------------------编程问答-------------------- 只能說你的算法有問題。
將全角的字符編碼看看是什麼樣的,對比普通的字符看看有什麼特別的地方。
--------------------编程问答-------------------- 1楼所说你的算法有问题没错,修改你的代码:
Option Explicit
Dim a As String
Dim sj() As Integer
Dim b1 As String
Dim b As String
Dim c As String
Dim i As Integer
Private Sub Command1_Click()
a = Text1.Text
For i = 1 To LenB(a)
b1 = Hex((AscB(MidB(a, i, 1)) + 1) Mod 256) '加密时,对ascii码值加1,转回密文
If Len(b1) = 1 Then
b1 = "0" & b1
Else
b1 = b1
End If
b = b & b1
Next
Text2.Text = b
ReDim sj((Len(b) / 2) - 1)
Print UBound(sj)
For i = 1 To (UBound(sj) + 1) * 2 Step 2
sj((i - 1) / 2) = Val("&H" & Mid(b, i, 2)) - 1 '解密时,对ascii码值减1,转回原文
If sj((i - 1) / 2) = -1 Then
sj((i - 1) / 2) = sj((i - 1) / 2) + 1
End If
c = c & ChrB(sj((i - 1) / 2))
Next
Text2.Text = c
End Sub
Private Sub Form_Load()
Text1 = "我舞他ASDDD¥%…—#·—"
End Sub
Text2中显示“我舞他ASDDD?%…—#·—”
除¥显示为?外,其它正确。 --------------------编程问答-------------------- StrConv()函数能达到目的:
--------------------编程问答--------------------
Option Explicit
Dim a As String
Dim sj() As Byte
Dim b1 As String
Dim b As String
Dim c As String
Dim c1 As Integer
Dim i As Integer
Dim yTemp() As Byte
Dim sTemp As String
Private Sub Command1_Click()
Dim Hsum As Integer
sTemp = Text1
sTemp = sTemp
yTemp = StrConv(sTemp, vbFromUnicode)
Hsum = UBound(yTemp)
ReDim sj(Hsum)
Print Hsum
For i = 0 To Hsum '加密
sj(i) = (yTemp(i) + 1) Mod 256
Next
sTemp = StrConv(sj, vbUnicode) '显示密文
Text2 = sTemp
For i = 0 To Hsum '解密
c1 = sj(i) - 1
If c1 = -1 Then c1 = c1 + 256
sj(i) = c1
Next
sTemp = StrConv(sj, vbUnicode)
Text3 = sTemp
End Sub
Option Explicit
Dim a As String
Dim sj1() As Byte
Dim sj() As Integer
Dim b1 As String
Dim b As String
Dim c As String
Dim c1 As Integer
Dim i As Integer
Dim yTemp() As Byte
Dim sTemp As Variant
Private Sub Command1_Click()
Dim Hsum As Integer
Dim n As Integer
n = 15
sTemp = Text1
yTemp = StrConv(sTemp, vbFromUnicode)
Hsum = UBound(yTemp)
Print Hsum
ReDim sj1(Hsum)
For i = 0 To Hsum '加密
sj1(i) = (yTemp(i) + n) Mod 256
Next
For i = 1 To Hsum + 1 '加密后按2进制写入binStr.dat
Open "C:\binStr.dat" For Binary As #1
Put #1, i, sj1(i - 1)
Close #1
Next
sTemp = StrConv(sj1, vbUnicode) '显示密文
Text2 = sTemp
For i = 0 To Hsum '解密
c1 = sj1(i) - n
If c1 < 0 Then c1 = c1 + 256
sj1(i) = c1
Next
sTemp = StrConv(sj1, vbUnicode)
Text3 = sTemp
End Sub
Private Sub Command2_Click()
Dim n As Integer
Dim Hsum As Integer
Dim zh As Integer
Dim sjBin() As Byte
Dim sjBin1() As Byte
Open "C:\binStr.dat" For Binary As #1
Hsum = LOF(1)
Close #1
Print Hsum
ReDim sjBin1(Hsum - 1)
ReDim sjBin(Hsum - 1)
n = 15
Open "C:\binStr.dat" For Binary As #1
For i = 1 To Hsum
Get #1, i, sjBin(i - 1)
zh = sjBin(i - 1) - n
If zh < 0 Then
sjBin1(i - 1) = zh + 256
Else
sjBin1(i - 1) = zh
End If
Next i
Close #1
sTemp = StrConv(sjBin1, vbUnicode)
Text4 = sTemp
End Sub
Private Sub Form_Load()
Text1 = "我舞他ASDDD¥%…—#·—a" '
End Sub
补充:VB , 基础类