LISTING PROGRAM
1.
Mainform.cs
using System;
using System.Windows.Forms;
namespace TugasAkhir {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent(); }
void MasukClick(object sender, EventArgs e) {
bangkitkunci tampil = new bangkitkunci(); tampil.Show();
this.Hide(); }
} }
2.
Pembangkit Kunci.cs
using System;
using System.Drawing; using System.Windows.Forms; using System.Numerics; using System.IO;
using System.Collections; using System.Diagnostics; using System.Text;
using System.Dynamic; using System.Linq;
namespace TugasAkhir {
public partial class bangkitkunci : Form {
public bangkitkunci() {
InitializeComponent(); }
//---Fungsi Pangkat Bilangan---//
bool isPower(int n){ if (n<=1)
return true;
for (int x=2; x<=Math.Sqrt(n); x++){ BigInteger p = x;
while (p<=n){ p*=x; if (p==n)
return true; }
}
return false; }
//---Menentukan Bilangan Prima---//
BigInteger a,b,gcd;
int z=0, P, relatifprima=0;
P = Convert.ToInt32(inputnilaiP.Text); if (P==2 || P==3)
status.Text = "Bilangan Prima"; else if (isPower(P))
status.Text = "Bilangan Komposit"; else {
for (int i = 2; i<=P; i++){
gcd = BigInteger.GreatestCommonDivisor(P,i); if (gcd==1){
z = i; break; }
}
a = BigInteger.ModPow((1+z),P,P); b = 1 + BigInteger.ModPow(z,P,P); if (a==b){
status.Text = "Bilangan Prima"; }
else
status.Text = "Bilangan Komposit"; }
for (int j=3; j<=P-1; j++){
gcd = BigInteger.GreatestCommonDivisor(P-1,j); if (gcd==1){
relatifprima = j; break;
} }
nilais.Text = Convert.ToString(relatifprima); }
void AcakClick(object sender, EventArgs e) {
int p0,p1,p2,p3,p4,p5,p6,p7; BigInteger nilaihasilpi;
p0 = Convert.ToInt32(pnol.Text); p1 = Convert.ToInt32(psatu.Text); p2 = Convert.ToInt32(pdua.Text); p3 = Convert.ToInt32(ptiga.Text); p4 = Convert.ToInt32(pempat.Text); p5 = Convert.ToInt32(plima.Text); p6 = Convert.ToInt32(penam.Text); p7 = Convert.ToInt32(ptujuh.Text); nilaihasilpi = p0*p1*p2*p3*p4*p5*p6*p7;
hasilpi.Text = Convert.ToString(nilaihasilpi); }
//---Menentukan nilai v0 - v7---// void ProsesClick(object sender, EventArgs e)
{
int NilaiP,s;
NilaiP = Convert.ToInt32(inputnilaiP.Text); s = Convert.ToInt32(nilais.Text);
int [] p = new int[8];
BigInteger [] hasil = new BigInteger[8]; int [] n = new int[8]{1,1,1,1,1,1,1,1}; p[0] = Convert.ToInt32(pnol.Text); p[1] = Convert.ToInt32(psatu.Text); p[2] = Convert.ToInt32(pdua.Text); p[3] = Convert.ToInt32(ptiga.Text); p[4] = Convert.ToInt32(pempat.Text); p[5] = Convert.ToInt32(plima.Text); p[6] = Convert.ToInt32(penam.Text);
for (int i = 0; i<=7; i++){
bukakunci.Filter = "Cipherkey(*.cipher)|*.cipher"; if (bukakunci.ShowDialog() == DialogResult.OK) { string nama = bukakunci.FileName.Substring(0, bukakunci.FileName.Length);
FileStream fstreamm = new FileStream(nama, FileMode.Open, FileAccess.ReadWrite);
StreamReader sreader = new StreamReader(fstreamm); sreader.BaseStream.Seek(0, SeekOrigin.Begin); cipherkeydek= sreader.ReadLine();
sreader.Close();
tb_cipherkeydek.Text = cipherkeydek; }
}
//---Dekripsi->Import Private Key---//
void OpenkunciClick(object sender, EventArgs e) {
OpenFileDialog bukakunci = new OpenFileDialog(); bukakunci.Filter = "Kunci(*.key)|*.key";
if (bukakunci.ShowDialog() == DialogResult.OK) { string nama = bukakunci.FileName.Substring(0, bukakunci.FileName.Length);
FileStream fstreamm = new FileStream(nama, FileMode.Open, FileAccess.ReadWrite);
StreamReader sreader = new StreamReader(fstreamm); sreader.BaseStream.Seek(0, SeekOrigin.Begin); kuncipublik = sreader.ReadLine();
kunciprivate = sreader.ReadLine(); sreader.Close();
tb_privatekey.Text = kunciprivate; }
}
//---Dekripsi->Kunci Simetris---//
void DecryptClick(object sender, EventArgs e) {
Stopwatch hitungwaktu = new Stopwatch(); hitungwaktu.Start();
string ambilkunci, ambilkey;
ambilkunci = Convert.ToString(tb_cipherkeydek.Text); ambilkey = Convert.ToString(tb_privatekey.Text); string [] bagi = ambilkunci.Split('-');
int [] cipher = new int[bagi.Length]; string [] baginilai = ambilkey.Split('-'); int [] key = new int[baginilai.Length]; double [] hasil = new double[8];
BigInteger [] gcd = new BigInteger[8]; int [] m = new int[8];
double [] nilai1 =new double[8];
double [] plainteks = new double[bagi.Length]; BigInteger [] pangkat = new BigInteger[bagi.Length]; int [] konversi = new int[bagi.Length];
char [] karakter = new char[bagi.Length]; double [] nilaiakhir = new double[8];
double [] nilaipangkat = new double[8]{1,2,4,8,16,32,64,128};
for (int k=0; k<=bagi.Length-2; k++) int.TryParse(bagi[k], out cipher[k]);
for (int mulai=0; mulai<=baginilai.Length-1; mulai++) int.TryParse(baginilai[mulai], out key[mulai]);
int tambah=0;
pangkat[i] = BigInteger.ModPow(cipher[i],key[8],key[9]);
wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
aDoc.ActiveWindow.Selection.Copy();
wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, ref missing,
}
pesan = new string (pesanarray); }
if (pesan.Length%2!=0) pesan = pesan + "¿"; return pesan;
}
public char [,] setkey(string kunci){
char [] kunciarray = kunci.ToCharArray(); char [] realarray = new char[256];
char [,] thematrix = new char [16,16]; int indexarray=0;
char [] karakterarray = new char[kunciarray.Length+256]; for (int i=0, j=1; i<karakterarray.Length; i++){
if (i<kunciarray.Length){
karakterarray[i] = kunciarray[i]; }
else{
karakterarray[i] = (char) j; j++;
} }
for (int i=0; i<256; i++){ if (i==0){
realarray[i] = karakterarray[i]; }
else{
for (int j=0; j<karakterarray.Length;j++){ bool duplikat = false;
for (int k=i-1; k>=0; k--){
if (karakterarray[j]==realarray[k]) duplikat = true;
}
if (duplikat==false){
realarray[i]=karakterarray[j]; break;
} } } }
for (int i=0; i<16; i++){ for (int j=0; j<16; j++){
thematrix[i,j]=realarray[indexarray]; indexarray++;
} }
return thematrix; }
bool CheckPairedChars(string pesan){ char [] pesanarray = pesan.ToCharArray(); for (int i=0; i<pesanarray.Length; i+=2){
if ((i ==pesanarray.Length-1) || (i == pesanarray.Length)) return true;
if (pesanarray[i]==pesanarray[i+1]) return false;
}
return true; }
int []GetXY(char karakter, char [,] kunci){ int [] xy = new int[2];
for (int i=0; i<16; i++){ for (int j=0; j<16; j++){ if (kunci[i,j]==karakter){ xy[0]=i;
FileStream fstreamm = new
bukaciphertext.Filter = "Ciphertext(*.ciphertext)|*.ciphertext"; bukaciphertext.RestoreDirectory = true;
for (int i=0; i<rtb_plaintext.Lines.Length; i++){ sww.WriteLine(rtb_plaintext.Lines[i]);
}
sww.Flush(); sww.Close(); }