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中,加密解密后会出现有的字符变成“”为何?  望朋友帮忙看看~谢谢

解决方案 »

  1.   

    不是每一个asc码都对应字母或者各种语言的字符以及各类符号的
    有很大一部分是没有利用的 所以有些asc码 没有显示或者 显示"?" 问号之类的
    所以你进行XOR加密后除非你再用xor还原否则不应该RichTextBox1.Text = t来显示
      

  2.   

    要存数组里面....
    用txtbox显示出来不一定转换的回去...有些字符是不显示的....xor以后可能会出现0的情况,要考虑到....
    加密后最好放数组..
      

  3.   

    to:二楼的朋友
       我是用相同的代码解密的啊
    to:三楼的朋友
       朋友是说用二进制打开文件后存数组里面吗?我也试试,可是要加密的文件是每一行为一条记录,但每条记录都不长(不超过15个中文),加密解密出来的文件却都连在一起了,不是按行显示的了?为什么会这样啊?
      

  4.   

    Private Sub CodedFile(InputFile As String, OutputFile As String, PasswordKey As Integer)
        Dim Char As String * 1
        Open InputFile For Binary As #1
        Open OutputFile For Binary As #2
        For z = 1 To FileLen(InputFile)
            Get 1, , Char
            Char = Chr$((Asc(Char) Xor PasswordKey))
            Put 2, , Char
        Next z
        Close #1
        Close #2
    End Sub用这段代码加密解密的话~源文件结尾会出现很多行相同的乱码,要加密的文件格式如下:
    吉林
    2007
    01
    01

    603
    600
    公司
    广州
    2007
    01
    07

    2011
    4971
    公司
      

  5.   

    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 ,请检查
      

  6.   

    给你个把字符串转化为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 SubPrivate 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
      

  7.   

    €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
      

  8.   

    对于非可显字符, 把他仍到text里面在从text里面读出来是会丢失信息的。
      

  9.   

    是的 所以用xor加密后的字符串不应该 再以 字符串的形式输出到 类似text的控件中 而是取它的ASC码值就行了
      

  10.   

    楼主这样加密。不是很好。--------------------------------------------------------
    进销存源码500元出售 http://www.skycn.com/soft/32388.html  
    --------------------------------------------------------