Gambar 3.15 Activity Diagram untuk Decryption2
3.1.4 Pseudocode
Pseudocode adalah kode atau bentuk penulisan algoritma dengan struktur pemrograman yang sederhana dan dapat dimengerti manusia sehingga memudahkan
dalam memahami suatu algoritma.
3.1.4.1 Pseudocode Proses Generate Prime
Berikut adalah Pseudocode untuk proses Generate Prime
ulang: Random rndp = new Random
p ← rndp.Next257, 1000
if Fermatp prima.Text
← Convert.ToStringp else
goto ulang end if
Proses Generate Prime dilakukan dengan cara melakukan random nilai bilangan prima p mulai dari 257 hingga 1000 dan selanjutnya nilai p yang dirandom diperiksa
sesuai proses Fermat. Jika nilai p sesuai dengan proses Fermat maka nilai p akan didapatkan.
3.1.4.2 Pseudocode Proses Fermat
Berikut adalah Pseudocode Proses Fermat
BigInteger a = 0; for int i = 0; i = p.ToString.Length; i++
Random rnda = new Random; a = rnda.Next2, intp;
if BigInteger.ModPowa, p - 1, p.IsOne return false
end if end for
return true
Universitas Sumatera Utara
Proses Fermat dilakukan untuk mencari bilangan prima yang akan digunakan untuk membangkitkan nilai kunci. Bilangan prima didapatkan dengan melakukan random
nilai bilangan bulat a dengan bilangan prima p dalam rentang 1
� � dan selanjutnya mengikuti Fermat Little’s Theorem yaitu
�
�−1
≡ ��� �.
3.1.4.3 Pseudocode Proses Euclidean GCD
Berikut adalah Pseudocode untuk proses Euclidean GCD
BigInteger r ← m n
if r = 0 return n
return cariGCDn, r
Pada proses Euclidean GCD digunakan pada saaat mencari nilai kunci enkripsi. Untuk memeriksa apakah nilai kunci enkripsi relatif prima dengan p-1 dimana p adalah
bilangan prima.
3.1.4.4 Pseudocode Proses Generate Key
Berikut adalah Pseudocode untuk proses Generate Key
ulange: Random rnde = new Random
e ← rnde.Next2, intp - 1
if cariGCDe, p = 1 nilaie.Text
← Convert.ToStringe BigInteger hasil = 0;
d = 0; while hasil = 1
dA++ hasil
← d e p - 1; if d 100000
goto ulange end if
nilaid.Text ← d.ToString
else goto ulange
end if
Universitas Sumatera Utara
Pada proses Generate Key dilakukan random nilai kunci enkripsi e dalam rentang
1 � � − 1 dan dilakukan pengecekan berdasarkan algoritma Euclidean
GCD. Jika sesuai, maka didapatkan nilai e yang selanjutnya digunakan untuk mencari nilai kunci dekripsi dengan cara melakukan modulo invers terhadap kunci e atau
� � � ≡ 1 ��� � − 1. Selanjutnya nilai d dibatasi sampai nilai 100000 untuk mengurangi proses yang terlalu lama pada generate key. Jika nilai d yang didapatkan
lebih besar dari 100000 maka akan mengulangi proses random nilai kunci enkripsi.
3.1.4.5 Pseudocode Proses Enkripsi
Berikut adalah Pseudocode untuk proses Enkripsi
string plaintext = plain.Text cipher1enkrip1.Text =
string pA = foreach char c in plaintext
pA += System.Convert.ToInt32c.ToString + end foreach
string[] temp = pA.Split Cipher
← new BigInteger[temp.Length] for int i = 0; i Cipher.Length - 1; i++
Cipher[i] ← BigInteger.PowBigInteger.Parsetemp[i],
inteA intp cipher1enkrip1.Text += Cipher[i].ToString +
end for SCipher
← new int[temp.Length 2 - 2] string mb =
string cip for int i = 0, j = 0; i Cipher.Length - 1; i++, j+=2
cip
← Cipher[i].ToString if cip.Length = 1
cip ← 000 + cip
else if cip.Length = 2 cip
← 00 + cip else if cip.Length = 3
cip ← 0 + cip
SCipher[j] ← Convert.ToInt32cip.Substring0, 2
SCipher[j + 1] ←Convert.ToInt32cip.Substring2,2
mb += SCipher[j].ToString + + SCipher[j +1].ToString +
end for
Universitas Sumatera Utara
Proses enkripsi dilakukan setelah memiliki nilai bilangan prima dan nilai kunci enkripsi melalui perhitungan
� = �
�
��� � dengan M adalah nilai karakter berdasarkan Tabel ASCII. Kemudian setelah didapatkan nilai C Ciphertext dalam
bentuk angka, dilakukan pengecekan jumlah digit angka yang dihasilkan per karakter. Jika kurang dari 4 digit, maka akan ditambah digitnya sampai memenuhi syarat 4
digit. Kemudian dilakukan pemisahan split setiap 2 digit untuk mendapatkan nilai pesan yang akan disisip pada citra.
3.1.4.6 Peseudocode Proses Embedding
Berikut adalah Pseudocode untuk proses Embedding
int limit ← plain.TextLength
Bitmap image ← new BitmappictureBox1.Image
int x ← image.Width
int y ← image.Height
if x 3 - 2 limit MessageBox.ShowMessage is over limit of image
pixel\r\nPlease choose another image,, Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning
else Bitmap output
← new Bitmapimage.Width, 1 Bitmap output2
← new Bitmapimage.Width, 1 for int i = 0; i 1; i++
for int j = 0; j x; j++ output.SetPixelj, i, Color.FromArgb255, 0,
0, 0 output2.SetPixelj, i, Color.FromArgb255, 0,
0, 0 end for
end for int x1 = 0, x2 = 0, index = 0, count = 0
for int i = 0; i y; i++ for int j = 0; j x 2; j++
if index = SCipher.Length goto habis
if count 2 = 0 if index + 2 = SCipher.Length
Universitas Sumatera Utara
output.SetPixelx1, i,Color.FromArgb 255, intSCipher[index], intSCipher[index + 1], 0
index += 2 x1++
count++ else if index + 1 = SCipher.Length
output.SetPixelx1, i, Color.FromArgb 255, intSCipher[index], 0, 0
index++ x1++
count++ else
output.SetPixelx1, i, Color.FromArgb 255, intSCipher[index], intSCipher[index + 1],
intSCipher[index + 2] index += 3
x1++ count++
end if end if
else if index + 2 = SCipher.Length
output2.SetPixelx2, i,Color.FromArgb 255, intSCipher[index],
intSCipher[index + 1], 0 index += 2
x2++ count++
else if index + 1 = SCipher.Length output2.SetPixelx2, i,Color.FromArgb
255, intSCipher[index], 0, 0 index++
x2++ count++
else output2.SetPixelx2, i,Color.FromArgb
255, intSCipher[index], intSCipher[index + 1],
intSCipher[index + 2] index += 3
x2++ count++
end if end for
end for end if
habis:
Universitas Sumatera Utara
for int i = 0; i 1; i++ for int j = 0; j x; j++
int r
← output.GetPixelj, i.R int g
← output.GetPixelj, i.G int b
← output.GetPixelj, i.B int r2
← output2.GetPixelj, i.R int g2
← output2.GetPixelj, i.G int b2
← output2.GetPixelj, i.B end for
end for
Pada proses Embedding dilakukan penyisipan dengan cara membuat baris baru Set Pixel pada bagian atas dan bawah matriks pixel citra dengan nilai 0 untuk setiap layer
kemudian nilai pesan disisipkan. Jika citra yang digunakan memiliki lebar pixel x yang jika dikalikan dengan 3 banyaknya layer R-G-B, dan dikurangi 2 bit penanda
pesan menghasilkan nilai lebih kecil dari panjang pesan limit maka sistem akan menampilkan pesan error untuk memberikan peringatan agar memilih citra dengan
ukuran lebih besar.
3.1.4.7 Pseudocode Proses Extracting
Berikut adalah Pseudocode untuk proses Extracting
int x ← image.Width
int y ← image.Height
string px = int r, g, b
string strR, strG, strB for int i = 0; i x; i++
for int j = 0; j y; j++ if j = 0 || j = y - 1
r
← image.GetPixeli, j.R; if r.ToString.Length = 1
strR ← 0 + r;
else strR
← r.ToString; g
← image.GetPixeli, j.G; if g.ToString.Length = 1
strG ← 0 + g;
else
Universitas Sumatera Utara
strG ← g.ToString;
b ← image.GetPixeli, j.B;
if b.ToString.Length = 1 strB
← 0 + b; else
strB ← b.ToString;
px += strR + + strG + + strB + ; end if
end for end for
int count = 1 for int i = 0; i px.Length; i++
if px[i] = if count 2 = 0
px = px.Removei, 1; count++;
end if end for
int index
← px.IndexOf 0000 0000; if index 0
DialogResult dialognohidden = MessageBox.Showno hidden message\rplease input another image, Info,
MessageBoxButtons.OK, MessageBoxIcon.Warning; else
px = px.Substring0, index; string[] temp
← px.Split ; px = ;
for int i = 0; i temp.Length; i++ px += Convert.ToInt32temp[i] + ;
end for cipher1enkrip2.Text = px;
end if
Pada proses ekstraksi, sistem membaca nilai pixel matriks citra mulai dari baris pertama sampai menemukan 2 bit berurutan bernilai 0000 0000 dan jika pada awal
baris citra langsung ditemukan bit berurutan 0000 0000 maka akan ditampilkan pesan error bahwa tidak terdapat pesan tersembunyi pada citra.
Universitas Sumatera Utara
3.1.4.8 Pseudocode Proses Dekripsi
Berikut adalah Pseudocode untuk proses Dekripsi
string plaintext ← cipher2dekrip1.Text
cipher3dekrip1.Text = string[] temp
← plaintext.Split Cipher
← new BigInteger[temp.Length] for int i = 0; i Cipher.Length - 1; i++
Cipher[i] ← BigInteger.PowBigInteger.Parsetemp[i],
intConvert.ToInt32textBox3.Text intConvert.ToInt32prima3.Text
cipher3dekrip1.Text += Cipher[i].ToString +
ascii =char.ConvertFromUtf32Convert.ToInt32 Cipher[i].ToString
plainawal.Text += ascii
end for
Proses dekripsi dilakukan dengan cara yang sama seperti enkripsi hanya berbeda pada penggunaan nilai kunci yaitu menggunakan kunci d sehingga setelah memiliki nilai
kunci dekripsi melalui perhitungan � = �
�
��� � akan di dapatkan angka-angka sebagai nilai desimal dari pesan dan selanjutnya dikonversi dengan Tabel ASCII
sehingga mendapatkan pesan awal.
3.1.5 Flowchart sistem