конвертирование RC4 из c # в vb - PullRequest
1 голос
/ 04 июля 2011

Я попал в ситуацию, когда мне пришлось конвертировать код RC4 из c # в vb Я попытался получить уже созданные коды в Интернете, но они, похоже, не работают как текущий C #, который у меня есть. Я очень новичок в VB, так что это очень сложно для меня. Может быть, профессионал увидит ошибку, которую я делаю. Оба кода дают разные зашифрованные результаты.

c # код:

public static string RC4(string pStrMessage, string pStrKey)
        {
            char[] lBytAsciiAry;
            int[] lBytKeyAry;
            int lLngIndex;  //
            int lBytJump;
            char lBytTemp;
            int lBytY;
            int lLngT;
            int lLngX;
            int lLngKeyLength;  //
            string encrypt; //The encrypted message

            lLngKeyLength = pStrKey.Length;
            if (lLngKeyLength < 1)
                return string.Empty;

            if (pStrMessage.Length < 1)
                return string.Empty;

            lBytAsciiAry = new char[256];
            lBytKeyAry = new int[256];

            for (lLngIndex = 0; lLngIndex < 256; lLngIndex++)
            {
                lBytKeyAry[lLngIndex] = pStrKey[(lLngIndex % lLngKeyLength)];
            }

            for (lLngIndex = 0; lLngIndex < 256; lLngIndex++)
            {
                lBytAsciiAry[lLngIndex] = Convert.ToChar(lLngIndex);
            }

            lBytJump = 0;
            for (lLngIndex = 0; lLngIndex < 256; lLngIndex++)
            {
                lBytJump = (lBytJump + lBytAsciiAry[lLngIndex] + lBytKeyAry[lLngIndex]) % 256;
                lBytTemp = lBytAsciiAry[lLngIndex];
                lBytAsciiAry[lLngIndex] = lBytAsciiAry[lBytJump];
                lBytAsciiAry[lBytJump] = Convert.ToChar(lBytTemp);
            }

            lLngIndex = 0;
            lBytJump = 0;
            encrypt = "";
            for (lLngX = 0; lLngX < pStrMessage.Length; lLngX++)
            {
                lLngIndex = (lLngIndex + 1) % 256; // wrap index
                lBytJump = (lBytJump + lBytAsciiAry[lLngIndex]) % 256; // wrap J+S()
                lLngT = (lBytAsciiAry[lLngIndex] + lBytAsciiAry[lBytJump]) % 256;
                //swap
                lBytTemp = lBytAsciiAry[lLngIndex];
                lBytAsciiAry[lLngIndex] = lBytAsciiAry[lBytJump];
                lBytAsciiAry[lBytJump] = lBytTemp;

                lBytY = lBytAsciiAry[lLngT];
                //encrypt = encrypt + Chr(Asc(Mid(pStrMessage, lLngX, 1)) Xor lBytY)
                encrypt = encrypt + Convert.ToChar(pStrMessage[lLngX] ^ lBytY);
            }

            return encrypt;
        }

мой VB перевод:

   Public Function RC4(ByVal pStrMessage As String, ByVal pStrKey As String) As String
        Dim lBytAsciiAry(0 To 256) As Char
        Dim lBytKeyAry(0 To 256) As Integer
        Dim lLngIndex As Integer
        Dim lBytJump As Integer
        Dim lBytTemp As Char
        Dim lBytY As Integer
        Dim lLngT As Integer
        Dim lLngX As Integer
        Dim lLngKeyLength As Integer
        Dim encrypt As String

        lLngKeyLength = pStrKey.Length

        If lLngKeyLength < 1 Then
            Return String.Empty
        End If

        If pStrMessage.Length < 1 Then
            Return String.Empty
        End If

        For lLngIndex = 0 To 255
            lBytKeyAry(lLngIndex) = Val(pStrKey((lLngIndex Mod lLngKeyLength)))
        Next

        For lLngIndex = 0 To 255
            lBytAsciiAry(lLngIndex) = Convert.ToChar(lLngIndex)
        Next

        lBytJump = 0
        For lLngIndex = 0 To 255
            lBytJump = (lBytJump + Asc(lBytAsciiAry(lLngIndex)) + lBytKeyAry(lLngIndex)) Mod 256
            lBytTemp = lBytAsciiAry(lLngIndex)
            lBytAsciiAry(lLngIndex) = lBytAsciiAry(lBytJump)
            lBytAsciiAry(lBytJump) = Convert.ToChar(lBytTemp)
        Next

        lLngIndex = 0
        lBytJump = 0
        encrypt = ""

        For lLngX = 0 To pStrMessage.Length - 1
            lLngIndex = (lLngIndex + 1) Mod 256
            lBytJump = (lBytJump + Asc(lBytAsciiAry(lLngIndex))) Mod 256
            lLngT = Asc(lBytAsciiAry(lLngIndex) + lBytAsciiAry(lBytJump)) Mod 256

            lBytTemp = lBytAsciiAry(lLngIndex)
            lBytAsciiAry(lLngIndex) = lBytAsciiAry(lBytJump)
            lBytAsciiAry(lBytJump) = lBytTemp

            lBytY = Asc(lBytAsciiAry(lLngT))
            encrypt = encrypt + Convert.ToChar(Asc(pStrMessage(lLngX)) Xor lBytY)
        Next

        Return encrypt
    End Function

1 Ответ

1 голос
/ 04 июля 2011

Попробуйте использовать этот конвертер C # в VB, чтобы увидеть, получите ли вы желаемый результат http://www.developerfusion.com/tools/convert/csharp-to-vb/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...