1

我有一个加密用 VB 编写的数据的应用程序。还有另一个应用程序使用相同的数据。加密代码相同,但在某些情况下会返回不同的结果。下面是VB和C#中的加密代码。

==================================== VB代码============= =====================

Dim s1 As String = ""
Dim i As Integer

If value = 0 Then value = 52

For i = 0 To s.Length - 1
   s1 += Chr(Asc(s.Substring(i, 1)) Xor value)
Next

Return s1

==================================== C#代码============= =====================

string Result = ""; 

int i = 0;

   try
   {
    if (value == 0)
        value = 52;

    char[] chars = s.ToCharArray();

    for (i = 0; i <= chars.Length - 1; i++)
    {
        Result += (char)((int)(chars[i]) ^ value);
    }


}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error");
}

return Result;
4

3 回答 3

4

VB.NET Chr() 和 Asc() 函数是与早期版本的 Visual Basic 处理字符的方式兼容的旧函数。它们假定系统代码页中的编码为 8 位。请改用 Unicode 兼容的 ChrW() 和 AscW() 函数。如果您需要 C# 代码产生与 VB.NET 代码相同的结果,或者使用 Encoding.Default.GetBytes()。

于 2011-12-09T13:48:37.973 回答
0

试试这个 VB 代码:

Dim Result As String = ""

Dim i As Integer = 0

Try
    If value = 0 Then
        value = 52
    End If

    Dim chars As Char() = s.ToCharArray()

    For i = 0 To chars.Length - 1
        Result += CChar(CInt(chars(i)) Xor value)


    Next
Catch ex As Exception
    MessageBox.Show(ex.Message, "Error")
End Try

Return Result
于 2011-12-09T13:46:20.203 回答
0

投射时尝试使用 (byte) 或 (short) 而不是 (int)。那可能行得通!

于 2015-06-13T00:20:45.910 回答