Exemple #1
0
        private void buttonEnkripsi_Click(object sender, EventArgs e)
        {
            ClearEnkrip();
            if (textBoxEnkripsiPlainText.Text.Length == 0)
            {
                MessageBox.Show("Plaintext kosong");
                return;
            }
            blokSize = (int)numericUpDownBlockSize.Value;
            string        text = textBoxEnkripsiPlainText.Text;
            string        now;
            StringBuilder plainBiner = new StringBuilder();

            foreach (char c in text)
            {
                plainBiner.Append(((int)c).ToBin(8));
            }
            dataGridViewProsesEnkripsi.Rows.Add("Plaintext : " + text);
            dataGridViewProsesEnkripsi.Rows.Add("Ukuran Blok = " + blokSize);
            dataGridViewProsesEnkripsi.Rows.Add();
            dataGridViewProsesEnkripsi.Rows.Add("Plaintext Biner : " + plainBiner.ToString());
            dataGridViewProsesEnkripsi.Rows.Add("C = M ^ E mod N");
            int i = 1;

            while (plainBiner.Length > 0)
            {
                dataGridViewProsesEnkripsi.Rows.Add();
                if (plainBiner.Length < blokSize)
                {
                    now = plainBiner.ToString().PadRight(blokSize, '0');
                    dataGridViewProsesEnkripsi.Rows.Add("M" + i + " = " + plainBiner.ToString());
                    dataGridViewProsesEnkripsi.Rows.Add("Tambah " + (blokSize - plainBiner.Length) + " bit 0 di belakang supaya sesuai ukuran blok");
                }
                else
                {
                    now = plainBiner.ToString(0, blokSize);
                }
                plainBiner.Remove(0, Math.Min(blokSize, plainBiner.Length));
                ulong t = now.BinToUlong();
                dataGridViewProsesEnkripsi.Rows.Add("M" + i + " = " + now + " = " + t);
                ulong c = 0;
                if (checkBoxShowEnkripsiDetail.Checked)
                {
                    dataGridViewProsesEnkripsi.Rows.Add("C" + i + " = " + t + " ^ " + E + " mod " + N);
                    c = Kripto.FastExponent(t, E, N, dataGridViewProsesEnkripsi);
                }
                else
                {
                    c = Kripto.QuickModulo(t, E, N);
                }
                cipher.Add(c);
                dataGridViewProsesEnkripsi.Rows.Add("C" + i++ + " = " + t + " ^ " + E + " mod " + N + " = " + c);
            }
            buttonDekripsi.Enabled = true;
        }
Exemple #2
0
        private void buttonHitungY_Click(object sender, EventArgs e)
        {
            ClearKey();
            uint p, g, x;

            if (uint.TryParse(textBoxP.Text, out p) && uint.TryParse(textBoxG.Text, out g) && uint.TryParse(textBoxX.Text, out x))
            {
                P = p;
                G = g;
                X = x;
                if (!Kripto.IsMiller(P, (int)Math.Min(P, (ulong)100)))
                {
                    MessageBox.Show("P bukan prima");
                }
                else if (G >= P || G < 1)
                {
                    MessageBox.Show("G antara 1 sampai " + (P - 1));
                }
                else if (X >= P || X < 1)
                {
                    MessageBox.Show("X antara 1 sampai " + (P - 1));
                }
                else if (!Kripto.IsGeneratorModulo(g, p))
                {
                    MessageBox.Show("G bukan generator modulo P");
                }
                else
                {
                    dataGridViewNotSortAbleKey.Rows.Add("P = " + P);
                    dataGridViewNotSortAbleKey.Rows.Add("G = " + G);
                    dataGridViewNotSortAbleKey.Rows.Add("X = " + X);
                    dataGridViewNotSortAbleKey.Rows.Add("Y = G^X % P");
                    dataGridViewNotSortAbleKey.Rows.Add("Y = " + G + "^" + X + " % " + P);
                    Y = Kripto.FastExponent(G, X, P, dataGridViewNotSortAbleKey);
                    dataGridViewNotSortAbleKey.Rows.Add("Y = " + G + "^" + X + " % " + P + " = " + Y);
                    textBoxY.Text = Y.ToString();
                    int   t    = 0;
                    ulong temp = P;
                    while (temp > 1)
                    {
                        t++;
                        temp >>= 1;
                    }
                    numericUpDownBlockSize.Maximum = t;
                    numericUpDownBlockSize.Value   = t;
                    buttonEnkripsi.Enabled         = true;
                }
            }
            else
            {
                MessageBox.Show("Cek p, q dan x");
            }
        }
Exemple #3
0
        private void buttonDekripsi_Click(object sender, EventArgs e)
        {
            ClearDekrip();
            StringBuilder plainBiner = new StringBuilder();
            string        now        = "";

            dataGridViewProsesDekripsi.Rows.Add("M  = C ^ D mod N");
            for (int i = 0; i < cipher.Count; i++)
            {
                ulong c = cipher[i];
                ulong m = 0;
                dataGridViewProsesDekripsi.Rows.Add();
                dataGridViewProsesDekripsi.Rows.Add("C" + (i + 1) + " = " + c);
                if (checkBoxShowDekripsiDetail.Checked)
                {
                    dataGridViewProsesDekripsi.Rows.Add("M" + (i + 1) + " = " + c + " ^ " + D + " mod " + N);
                    m = Kripto.FastExponent(c, D, N, dataGridViewProsesDekripsi);
                }
                else
                {
                    m = Kripto.QuickModulo(c, D, N);
                }
                now = m.ToBin(blokSize);
                plainBiner.Append(now);
                dataGridViewProsesDekripsi.Rows.Add("M" + (i + 1) + " = " + c + " ^ " + D + " mod " + N + " = " + m);
                dataGridViewProsesDekripsi.Rows.Add("M" + (i + 1) + " = " + now);
            }
            dataGridViewProsesDekripsi.Rows.Add();
            dataGridViewProsesDekripsi.Rows.Add("Plaintext Biner : " + plainBiner.ToString());
            StringBuilder plainText = new StringBuilder();

            while (plainBiner.Length > 0)
            {
                now = plainBiner.ToString(0, Math.Min(8, plainBiner.Length));
                ulong t = now.BinToUlong();
                if (t == 0)
                {
                    dataGridViewProsesDekripsi.Rows.Add(plainBiner.ToString() + " = bit yang ditambahkan");
                    break;
                }
                else
                {
                    dataGridViewProsesDekripsi.Rows.Add(now + " = " + t + " = " + (char)t);
                    plainText.Append((char)t);
                }
                plainBiner.Remove(0, Math.Min(8, plainBiner.Length));
            }
            dataGridViewProsesDekripsi.Rows.Add("Plaintext : " + plainText.ToString());
            textBoxDekripsiPlainText.Text = plainText.ToString();
        }
Exemple #4
0
        private void buttonDekripsi_Click(object sender, EventArgs e)
        {
            ClearDekrip();
            StringBuilder plainBiner = new StringBuilder();
            string        now;

            dataGridViewProsesDekripsi.Rows.Add("c = a^(p-1-x) % p");
            dataGridViewProsesDekripsi.Rows.Add("m = c.b % p");
            for (int i = 0; i < ca.Count; i++)
            {
                ulong a = ca[i];
                ulong b = cb[i];
                ulong c = 0, m = 0;
                dataGridViewProsesDekripsi.Rows.Add();
                dataGridViewProsesDekripsi.Rows.Add("c = " + a + "^(" + P + "-1-" + X + ") % " + P);
                if (checkBoxShowDekripsiDetail.Checked)
                {
                    c = Kripto.FastExponent(a, P - 1 - X, P, dataGridViewProsesDekripsi);
                }
                else
                {
                    c = Kripto.QuickModulo(a, P - 1 - X, P);
                }
                m = Kripto.MultiplyModulo(c, b, P);
                plainBiner.Append(m.ToBin(blokSize));
                dataGridViewProsesDekripsi.Rows.Add("m = (" + c + " . " + b + ") % " + P + " = " + m);
            }
            dataGridViewProsesDekripsi.Rows.Add();
            dataGridViewProsesDekripsi.Rows.Add("Plaintext Biner : " + plainBiner.ToString());
            StringBuilder plainText = new StringBuilder();

            while (plainBiner.Length > 0)
            {
                now = plainBiner.ToString(0, Math.Min(8, plainBiner.Length));
                ulong t = now.BinToUlong();
                if (t == 0)
                {
                    dataGridViewProsesDekripsi.Rows.Add(plainBiner.ToString() + " = bit yang ditambahkan");
                    break;
                }
                else
                {
                    dataGridViewProsesDekripsi.Rows.Add(now + " = " + t + " = " + (char)t);
                    plainText.Append((char)t);
                }
                plainBiner.Remove(0, Math.Min(8, plainBiner.Length));
            }
            dataGridViewProsesDekripsi.Rows.Add("Plaintext : " + plainText.ToString());
            textBoxDekripsiPlainText.Text = plainText.ToString();
        }
Exemple #5
0
 private void buttonEnkripsi_Click(object sender, EventArgs e)
 {
     ClearEnkrip();
     if (ulong.TryParse(textBoxK.Text, out K))
     {
         if (K > P - 2 || K < 1)
         {
             MessageBox.Show("K antara 1 sampai " + (P - 2));
         }
         else if (textBoxEnkripsiPlainText.Text.Length == 0)
         {
             MessageBox.Show("Plaintext kosong");
         }
         else
         {
             blokSize = (int)numericUpDownBlockSize.Value;
             string        text = textBoxEnkripsiPlainText.Text;
             string        now;
             StringBuilder plainBiner = new StringBuilder();
             foreach (char c in text)
             {
                 plainBiner.Append(((int)c).ToBin(8));
             }
             dataGridViewProsesEnkripsi.Rows.Add("Plaintext : " + text);
             dataGridViewNotSortAbleKey.Rows.Add("K = " + K);
             dataGridViewProsesEnkripsi.Rows.Add("Ukuran Blok = " + blokSize);
             dataGridViewProsesEnkripsi.Rows.Add();
             dataGridViewProsesEnkripsi.Rows.Add("Plaintext Biner : " + plainBiner.ToString());
             dataGridViewProsesEnkripsi.Rows.Add("a = g^k % p");
             dataGridViewProsesEnkripsi.Rows.Add("b = m.y^k % p");
             int i = 1;
             while (plainBiner.Length > 0)
             {
                 dataGridViewProsesEnkripsi.Rows.Add();
                 dataGridViewProsesEnkripsi.Rows.Add();
                 if (plainBiner.Length < blokSize)
                 {
                     now = plainBiner.ToString().PadRight(blokSize, '0');
                     dataGridViewProsesEnkripsi.Rows.Add("M" + i + " = " + plainBiner.ToString());
                     dataGridViewProsesEnkripsi.Rows.Add("Tambah " + (blokSize - plainBiner.Length) + " bit 0 di belakang supaya sesuai ukuran blok");
                 }
                 else
                 {
                     now = plainBiner.ToString(0, blokSize);
                 }
                 plainBiner.Remove(0, Math.Min(blokSize, plainBiner.Length));
                 ulong t = now.BinToUlong();
                 dataGridViewProsesEnkripsi.Rows.Add("M" + i + " = " + now + " = " + t);
                 ulong a = 0, b = 0;
                 if (checkBoxShowEnkripsiDetail.Checked)
                 {
                     dataGridViewProsesEnkripsi.Rows.Add("a = " + G + "^" + K + " % " + P);
                     a = Kripto.FastExponent(G, K, P, dataGridViewProsesEnkripsi);
                 }
                 else
                 {
                     a = Kripto.QuickModulo(G, K, P);
                 }
                 dataGridViewProsesEnkripsi.Rows.Add("a = " + G + "^" + K + " % " + P + " = " + a);
                 dataGridViewProsesEnkripsi.Rows.Add();
                 if (checkBoxShowEnkripsiDetail.Checked)
                 {
                     dataGridViewProsesEnkripsi.Rows.Add("b = " + t + "." + Y + "^" + K + " % " + P);
                     dataGridViewProsesEnkripsi.Rows.Add(Y + "^" + K + " % " + P);
                     b = Kripto.FastExponent(Y, K, P, dataGridViewProsesEnkripsi);
                     dataGridViewProsesEnkripsi.Rows.Add(Y + "^" + K + " % " + P + " = " + b);
                     dataGridViewProsesEnkripsi.Rows.Add("b = (" + t + "." + b + ") % " + P);
                 }
                 else
                 {
                     b = Kripto.QuickModulo(Y, K, P);
                 }
                 b = Kripto.MultiplyModulo(b, (ulong)t, P);
                 dataGridViewProsesEnkripsi.Rows.Add("b = " + t + "." + Y + "^" + K + " % " + P + " = " + b);
                 ca.Add(a);
                 cb.Add(b);
             }
             buttonDekripsi.Enabled = true;
         }
     }
     else
     {
         MessageBox.Show("Cek k");
     }
 }