простое шифрование в C # и VB возвращает разные результаты - PullRequest
1 голос
/ 09 декабря 2011

У меня есть приложение, которое шифрует данные, которые записываются в VB.Есть другое приложение, которое использует те же данные.Код шифрования тот же, но в некоторых случаях он дает другой результат.Ниже приведен код шифрования в VB и C #.

========================================= VB CODE =================================

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 # CODE =================================

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;

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

Функции VB.NET Chr () и Asc () - это устаревшие функции, которые совместимы с ранними версиями символов Visual Basic, обрабатываемыми. Они предполагают 8-битное кодирование в системной кодовой странице. Вместо этого используйте Unicode-совместимые функции ChrW () и AscW (). Или используйте Encoding.Default.GetBytes (), если вам нужен код C # для получения того же результата, что и код VB.NET.

0 голосов
/ 13 июня 2015

Попробуйте использовать (байт) или (короткий) вместо (int), когда вы его разыгрываете. Это может сработать!

0 голосов
/ 09 декабря 2011

Попробуйте этот код 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
...