C # регулярное выражение заменить все шаблоны с различными строками - PullRequest
0 голосов
/ 20 мая 2018

хорошо, так что в основном я перевел этот xor-конвертер из javascript, чтобы я мог быстрее xor-строки с помощью c + p моего кода на c ++, и он просто заменяет все строки на xor'd для меня, но это xors для всех строк с первым xorэто создало бы для первой строки любую помощь с этим, будет очень признателен.Я попытался создать цикл, но я просто потерпел неудачу и сдался.это, вероятно, то, что мне нужно сделать, мне просто нужен кто-то, чтобы показать мне, как я должен его настроить.

string Dec2Hex(int test)
    {
        string hex = test.ToString("X");
        return hex;
    }

    string symbols = " !\"#$%&'()*+,-./0123456789:;<=>?@";
    int toAscii(string xx)
    {
        var loAZ = "abcdefghijklmnopqrstuvwxyz";
        symbols += loAZ.ToUpper();
        symbols += "[\\]^_`";
        symbols += loAZ;
        symbols += "{|}~";
        int loc;
        loc = symbols.IndexOf(xx);
        if (loc > -1)
        {
            //Ascii_Decimal = 32 + loc;
            return (32 + loc);
        }
        return (0);  // If not in range 32-126 return ZERO
    }

    byte[] randByte()
    {
        Byte[] RandByte = new Byte[5];
        new Random().NextBytes(RandByte);
        return RandByte;
    }

    public void RunEncrypter()
    {
        string test = textBox1.Text;
        System.Text.RegularExpressions.Regex x = new System.Text.RegularExpressions.Regex("\"(.*?)\"", System.Text.RegularExpressions.RegexOptions.Singleline);

        var matches = x.Matches(textBox1.Text);
        string s1 = "";

        if (matches.Count <= 0)
            return;

       s1 = matches[0].Groups[1].Value;

        byte[] randombyte = randByte();
        double xvaluestart = randombyte[0];
        string xrefkill = "0x" + Dec2Hex(randombyte[1]) + Dec2Hex(randombyte[2]) + Dec2Hex(randombyte[3]) + Dec2Hex(randombyte[4]);

        int finallen = s1.Length + 1;

        string hexsequence = "\"";
        double xvalue = xvaluestart;
        for (int i = 0; i < s1.Length; i++)
        {
            string ch = s1.Substring(i, 1);
            int chval;

            chval = toAscii(ch);
            if (chval == 0) { s1 = "invalid character: " + ch; return; }

            chval ^= (int)xvalue;
            xvalue += 1;
            xvalue %= 256;
            hexsequence += "\\x" + Dec2Hex(chval);
        }
        hexsequence += '"';

        string s2 = "/*" + s1 + "*/XorStr<0x" + Dec2Hex((int)xvaluestart) + "," + finallen + "," + xrefkill + ">(";

        s2 += hexsequence + "+" + xrefkill + ").s";

        textBox1.Text = x.Replace(textBox1.Text, s2);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        RunEncrypter();
    }

1 Ответ

0 голосов
/ 20 мая 2018

Я не совсем понимаю, что вы пытаетесь, но простой шифр XOR может быть реализован в C # так просто:

static string Xor(string text, int key)
{
    string result = "";

    for (int i = 0; i < text.Length; i++)
    {
        int charValue = Convert.ToInt32(text[i]); //get the ASCII value of the character
        charValue ^= key; //xor the value

        result += char.ConvertFromUtf32(charValue); //convert back to string
    }
    return result;
}

Этот алгоритм проходит через каждый символ в строке, преобразует его в егоцелочисленное значение ASCII, xor значение с помощью ключа и преобразование нового значения обратно в строку.

...