Пример #1
0
        private void buttonCalculate_Click(object sender, EventArgs e)
        {
            Regex hexa = new Regex(@"^[0-9A-F]+$");

            if (hexa.IsMatch(textBoxNumber1.Text) && hexa.IsMatch(textBoxNumber2.Text) && hexa.IsMatch(textBoxDivisor.Text))
            {
                try
                {
                    int    num1 = textBoxNumber1.Text.HexToInt();
                    int    num2 = textBoxNumber2.Text.HexToInt();
                    int    div = textBoxDivisor.Text.HexToInt();
                    string bin1 = num1.ToBin();
                    string bin2 = num2.ToBin();
                    string binDiv = div.ToBin();
                    int    len = 5 * (bin1.Length + bin2.Length - 1) / 4;
                    string now, binary;
                    string line = DuplicateChar('-', len);
                    dataGridViewCalcBiner.Rows.Clear();
                    dataGridViewCalcHex.Rows.Clear();

                    InsertDataGridPolinomial(ToPolinomial(bin1));
                    binary = InsertSpace(bin1);
                    now    = string.Concat(DuplicateChar(' ', len - binary.Length), binary);
                    InsertDataGrid(now);

                    InsertDataGridPolinomial(ToPolinomial(bin2));
                    binary = InsertSpace(bin2);
                    now    = string.Concat(DuplicateChar(' ', len - binary.Length), binary);
                    InsertDataGrid(now);

                    InsertDataGridPolinomial(line);
                    InsertDataGrid(line);
                    string binMul = Multiply(bin1, bin2, bin2.Length - 1);

                    line += "XOR";
                    InsertDataGridPolinomial(line);
                    InsertDataGrid(line);

                    InsertDataGridPolinomial(ToPolinomial(binMul));
                    binary = InsertSpace(binMul);
                    now    = string.Concat(DuplicateChar(' ', len - binary.Length), binary);
                    InsertDataGrid(now);

                    int ct = 64;
                    if (binMul.Length > 8)
                    {
                        binDiv = string.Concat(binDiv, DuplicateChar('0', binMul.Length - binDiv.Length));
                    }
                    while (binMul.Length > 8 && ct-- > 0)
                    {
                        InsertDataGridPolinomial(ToPolinomial(binDiv));
                        binary = InsertSpace(binDiv);
                        now    = string.Concat(DuplicateChar(' ', len - binary.Length), binary);
                        InsertDataGrid(now);

                        InsertDataGridPolinomial(line);
                        InsertDataGrid(line);
                        binMul = XOR(binMul, binDiv);
                        InsertDataGridPolinomial(ToPolinomial(binMul));
                        binary = InsertSpace(binMul);
                        now    = string.Concat(DuplicateChar(' ', len - binary.Length), binary);
                        InsertDataGrid(now);
                        while (binMul[0] == '0')
                        {
                            binMul = binMul.Remove(0, 1);
                            binDiv = binDiv.Remove(binDiv.Length - 1, 1);
                        }
                    }
                    int gf = binMul.BinToInt();
                    InsertDataGridPolinomial(ToPolinomial(binMul));
                    InsertDataGrid(now + " = " + gf.ToHex() + "(16) = " + Kripto.GF_8_Hexa(num1, num2));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
            else
            {
                MessageBox.Show("Hexa tidak valid");
            }
        }