当前位置:编程学习 > VB >>

关于汉字或字符用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 ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,