Этот код в сети VB

Я декомпилировал приложение vb.net с помощью рефлектора.

Все строки шифруются этим методом:

Public Shared Function smethod_0(ByVal string_0 As String) As String
    Dim length As Integer = string_0.Length
    Dim chArray As Char() = New Char(length  - 1) {}
    Dim i As Integer
    For i = 0 To chArray.Length - 1
        Dim ch As Char = string_0.Chars(i)
        Dim num3 As Byte = CByte((ch Xor (length - i)))
        Dim num4 As Byte = CByte(((ch >> 8) Xor i))
        chArray(i) = DirectCast(((num4 << 8) Or num3), Char)
    Next i
    Return String.Intern(New String(chArray))
End Function

Этот метод получает входную строку, подобную этой:

"j" & ChrW(354) & ChrW(623) & ChrW(868)

и возвращает читаемую строку.

Как я могу преобразовать этот код в vb.net или С#?

Компилятор Vb.net жалуется, что этот код неверен, потому что xor не определен для комбинации char/int.


person marino    schedule 20.06.2012    source источник
comment
Попробуйте переключить Reflector на вывод C# — он имеет тенденцию создавать более точный код C#, чем VB.NET.   -  person Polynomial    schedule 20.06.2012
comment
помимо того факта, что это вряд ли будет надежным шифрованием (если оно вообще есть), я склонен считать грубым заимствовать чей-то код - если вы знаете, что это VB, попросите автора дать вам исходный код - если он откажется, напишите его сами!   -  person Random Dev    schedule 20.06.2012


Ответы (2)


Версия С# (только по образовательным причинам - максимально возможное сохранение похожего кода):

public static string encrypt(string s)
{
    int length = s.Length, i = 0;
    char[] chArray = new char[length];
    byte b1, b2;
    char ch;
    for (i = 0; i <= chArray.Length - 1; i++)
    {
        ch = s[i];
        b1 = Convert.ToByte((ch ^ (length - i)));
        b2 = Convert.ToByte(((ch >> 8) ^ i));
        chArray[i] = (char)((b2 << 8) | b1);
    }
    return string.Intern(new string(chArray));
}
person Community    schedule 20.06.2012
comment
строка b1 = Convert.t((ch ^ (длина - i))); вернуть эту ошибку: значение слишком велико или слишком мало для беззнакового байта - person marino; 20.06.2012
comment
Очевидно, что это происходит, когда длина строки, которую вы хотите закодировать, превышает 255 символов. Код, который вы нашли, предназначен для коротких строк. Строки большего размера должны изначально разделяться на укороченные. - person ; 20.06.2012

Я решил таким образом:

    public static string encrypt(string string_0)
    {
        int length = string_0.Length;
        char[] chArray = new char[length];
        for (int i = 0; i < chArray.Length; i++)
        {
            char ch = string_0[i];
            byte num3 = (byte)(ch ^ (length - i));
            byte num4 = (byte)((ch >> 8) ^ i);
            chArray[i] = (char)((num4 << 8) | num3);
        }

        File.AppendAllText("decript.txt", Environment.NewLine + string_0 + "  =  " + string.Intern(new string(chArray)));

вернуть строку.Intern (новая строка (chArray));

    }

Спасибо за помощь

person marino    schedule 21.06.2012