private void buttonCalculate_Click(object sender, EventArgs e) { int num = Convert.ToInt32(numericUpDownNumber.Value); int pow = Convert.ToInt32(numericUpDownPower.Value); int div = Convert.ToInt32(numericUpDownDivisor.Value); textBoxResult.Text = QuickModulo(num, pow, div).ToString(); textBox1.Text = Kripto.QuickModulo(num, pow, div).ToString(); }
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; }
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(); }
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(); }
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"); } }
private void buttonDekripsi_Click(object sender, EventArgs e) { ClearDekrip(); dataGridViewProsesDekripsi.Rows.Add("a = P^-1 mod Q"); dataGridViewProsesDekripsi.Rows.Add("b = Q^-1 mod P"); dataGridViewProsesDekripsi.Rows.Add("r = c ^ ((P+1)/4) mod P"); dataGridViewProsesDekripsi.Rows.Add("s = c ^ ((Q+1)/4) mod Q"); dataGridViewProsesDekripsi.Rows.Add("x = (a * P * s + b * Q * r) mod N"); dataGridViewProsesDekripsi.Rows.Add("y = (a * P * s - b * Q * r) mod N"); dataGridViewProsesDekripsi.Rows.Add("M1 = x"); dataGridViewProsesDekripsi.Rows.Add("M2 = N - x"); dataGridViewProsesDekripsi.Rows.Add("M1 = y"); dataGridViewProsesDekripsi.Rows.Add("M2 = N - y"); dataGridViewProsesDekripsi.Rows.Add(); ulong a = Kripto.InversModulo(P, Q, dataGridViewProsesDekripsi); ulong b = Kripto.InversModulo(Q, P, dataGridViewProsesDekripsi); dataGridViewProsesDekripsi.Rows.Add("a = " + P + "^-1 mod " + Q + " = " + a); dataGridViewProsesDekripsi.Rows.Add("b = " + Q + "^-1 mod " + P + " = " + b); int i = 1; ulong[] arr = new ulong[4]; List <ulong> m = new List <ulong>(); StringBuilder plaintext = new StringBuilder(); ulong p4 = (P + 1) / 4; ulong q4 = (Q + 1) / 4; foreach (ulong c in cipher) { ulong r = Kripto.QuickModulo(c, p4, P); ulong s = Kripto.QuickModulo(c, q4, Q); ulong left = Kripto.MultiplyModulo(Kripto.MultiplyModulo(a, P, N), s, N); ulong right = Kripto.MultiplyModulo(Kripto.MultiplyModulo(b, Q, N), r, N); ulong x = (left + right) % N; ulong y; if (right > left) { y = N - right + left; } else { y = (Kripto.MultiplyModulo(Kripto.MultiplyModulo(a, P, N), s, N) - Kripto.MultiplyModulo(Kripto.MultiplyModulo(b, Q, N), r, N)) % N; } arr[0] = x; arr[1] = N - x; arr[2] = y; arr[3] = N - y; dataGridViewProsesDekripsi.Rows.Add(); dataGridViewProsesDekripsi.Rows.Add("r" + i + " = " + c + " ^ ((" + P + "+1)/4) mod " + P + " = " + r); dataGridViewProsesDekripsi.Rows.Add("s" + i + " = " + c + " ^ ((" + Q + "+1)/4) mod " + Q + " = " + s); dataGridViewProsesDekripsi.Rows.Add("x" + i + " = (" + a + " * " + P + " * " + s + " + " + b + " * " + Q + " * " + r + ") mod " + N + " = " + x); dataGridViewProsesDekripsi.Rows.Add("y" + i + " = (" + a + " * " + P + " * " + s + " - " + b + " * " + Q + " * " + r + ") mod " + N + " = " + y); int idx = dataGridViewProsesDekripsi.RowCount; for (int j = 0; j < 4; j++) { ulong t = arr[j]; dataGridViewProsesDekripsi.Rows.Add("M" + (j + 1) + " = " + arr[j] + " = " + arr[j].ToBin(16)); if (((t >> 8) & ((1 << 8) - 1)) == (t & ((1 << 8) - 1))) { m.Add(t); dataGridViewProsesDekripsi[0, idx + j].Style.BackColor = Color.LimeGreen; } } i++; } dataGridViewProsesDekripsi.Rows.Add(); i = 1; foreach (ulong t in m) { dataGridViewProsesDekripsi.Rows.Add("M" + i + " = " + t + " = " + t.ToBin(16)); dataGridViewProsesDekripsi.Rows.Add("M" + i++ + " = " + (t >> 8).ToBin(8) + " = " + (t >> 8) + " = " + (char)(t >> 8)); plaintext.Append((char)(t >> 8)); } textBoxDekripsiPlainText.Text = plaintext.ToString(); }