LAMPIRAN A : LISTING PROGRAM Basic.java package ferluleapp; /** * * @author Ratna */ public class basic { //fungsi untuk menghitung modulus dalam pangkat yang besar public static int modexp(int a, int b, int x) { int c = 1 ; for (int i = 0 ; i < b ; i++ ){ c = (a * c) % x; return c; //membuat daftar karakter dalam array public static char codechar[] = { ' ','1','2','3','4','5','6','7','8','9','0','- ','=','!','@','#','$','%','^','&','*','(',')','_','+','a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w',' x','y','z','a','b','c','d','e','f','g','h','i','j','k', 'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',',','.',' /',';',' ','[',']','\'','<','>','?',':',' ','{','', ' ','`','~',' ',' ',' ',' ','β' ; //merubah karakter menjadi kode public static int chartocode(char m){ int codec = 0; for (int i = 0 ; i < codechar.length; i++) { if (m == codechar[i]){ codec = i; return codec; //merubah kode menjadi karakter public static char codetochar(int co){ char charc = 0; for (int i = 0 ; i < codechar.length; i++){ if(co == i){ charc = codechar[i];
return charc; //fungsi untuk pangkat dengan inputan n(nilai awal), m(pangkat) public static int mathpow(int n, int m){ int x = 1; for( int i = 1 ; i <= m ; i++ ){ x = n * x; return x; Elgamal.java package ferluleapp; import java.util.random; /** * * @author Ratna */ public class elgamal { //fungsi untuk memecah ciphernumber dari proses enkripsi public static String mt(string x){ String result = ""; String a = ""; String b = ""; char resulta = 0; char resultb = 0; if(x.length() == 1){ a = "0"; b = String.valueOf(x.charAt(0)); else if(x.length() == 2){ a = String.valueOf(x.charAt(0)); b = String.valueOf(x.charAt(1)); else if(x.length() == 3){ a = String.valueOf(x.charAt(0)); b = String.valueOf(x.charAt(1)) + String.valueOf(x.charAt(2)); else if(x.length() == 4){ a = String.valueOf(x.charAt(0)) + String.valueOf(x.charAt(1)); b = String.valueOf(x.charAt(2)) + String.valueOf(x.charAt(3)); resulta = basic.codetochar(integer.parseint(a)); resultb = basic.codetochar(integer.parseint(b));
result = String.valueOf(resulta)+String.valueOf(resultb); return result; //fungsi proses enkripsi public static String enkripsi(string str, int keyp){ //[START] Initialize variabel-variabel Random gen = new Random(); int keyalpha = 0, keybeta = 0, keya = 0; int keyk = 0; int keygamma = 0; int keydelta = 0; int ca = 0; String ciphertext = ""; //[END] Initialize variabel-variabel keyalpha = prime.isprimitif(keyp); //perulangan mencari nilai kunci alpha int tempkeya = 0; for( int i = 0 ; i < keyp - 2 ; i++ ){ tempkeya = gen.nextint(keyp-2) + 1; if ( prime.isprime(tempkeya) == true && tempkeya < 1000){ keya = tempkeya; //perulangan kunci alpha menghindari digit kedua dari belakang 0 if( String.valueOf(keyA).length() > 2){ while ( String.valueOf(keyA).charAt(String.valueOf(keyA).length()-2) == '0' ){ for( int i = 0 ; i < keyp - 2 ; i++ ){ tempkeya = gen.nextint(keyp-2) + 1; if ( prime.isprime(tempkeya) == true && tempkeya < 1000){ keya = tempkeya; keybeta = basic.modexp(keyalpha, keya, keyp); ciphertext += mt(integer.tostring(keyp))+""+mt(integer.tostring(keya)); for (int i = 0 ; i < str.length() ; i++){ keyk = (int) (Math.random() * (keyp - 2)); // menentukan nilai acak K,dimana K elemen dari 0... p-2 ca = basic.chartocode(str.charat(i)); // merubah char ke bentuk kode keygamma = basic.modexp(keyalpha, keyk, keyp); // menghitung nilai Gamma untuk proses enkripsi
if ( Integer.toString(keyGamma).length() > 2){ while ( Integer.toString(keyGamma).charAt(Integer.toString(keyGamma).length() - 2) == '0' ){ keyk = (int) (Math.random() * (keyp - 2)); keygamma = basic.modexp(keyalpha, keyk, keyp); keydelta = basic.modexp((basic.modexp(keybeta, keyk, keyp)*basic.modexp(ca, 1, keyp)), 1, keyp); // menghitung nilai Delta untuk proses enkripsi if ( Integer.toString(keyDelta).length() > 2){ while ( Integer.toString(keyDelta).charAt(Integer.toString(keyDelta).length() - 2) == '0' ){ keyk = (int) (Math.random() * (keyp - 2)); keygamma = basic.modexp(keyalpha, keyk, keyp); keydelta = basic.modexp((basic.modexp(keybeta, keyk, keyp)*basic.modexp(ca, 1, keyp)), 1, keyp); ciphertext += mt(integer.tostring(keygamma))+""+mt(integer.tostring(keydelta)); return ciphertext; // fungsi untuk melakukan proses dekripsi. public static String dekripsi(string txt){ int keydekrip = 0; int keydg = 0; int keydek= 0; int cd = 0; String plaintext = ""; String a = "", b = "", c = ""; int q = 0, n = 1; String tempkeyp = "", tempkeya = ""; String tempkeypa = String.valueOf(basic.charToCode(txt.charAt(0))); String tempkeypb = String.valueOf(basic.charToCode(txt.charAt(1))); String tempkeyaa = String.valueOf(basic.charToCode(txt.charAt(2))); String tempkeyab = String.valueOf(basic.charToCode(txt.charAt(3))); if ( tempkeypb.length() == 3 ){ if(tempkeypb.substring(0, 1).equals("1") && tempkeypb.substring(1, 2).equals("0")){ tempkeypb = tempkeypb.substring(1, 2) + tempkeypb.substring(2, 3);
if ( tempkeyab.length() == 3 ){ if(tempkeyab.substring(0, 1).equals("1") && tempkeyab.substring(1, 2).equals("0")){ tempkeyab = tempkeyab.substring(1, 2) + tempkeyab.substring(2, 3); int keyp = Integer.valueOf(tempKeyPa+tempKeyPb); int keya = Integer.valueOf(tempKeyAa+tempKeyAb); txt = txt.substring(4, txt.length()); int[] hh = new int[txt.length()/2]; for (int j = 0 ; j < txt.length()/2 ; j++){ a = String.valueOf(basic.charToCode(txt.charAt(q))); b = String.valueOf(basic.charToCode(txt.charAt(q+1))); q = q + 2; c = a+b; hh[j] += Integer.valueOf(c); keyp); int count = 0; int keygammainvers = 0 ; int tempa = 0, tempb = 0; for ( int i = 0 ; i < (hh.length)/2 ; i++){ keygammainvers = keyp - 1 - keya; keydekrip = basic.modexp(hh[count], (keygammainvers), tempa = basic.modexp(hh[(count+1)], 1, keyp); keydg = basic.modexp((tempa * keydekrip), 1, keyp); plaintext += basic.codetochar(keydg); count = count + 2; return plaintext; filechooser.java package ferluleapp; import java.io.bufferedreader; import java.io.file; import java.io.filereader; import java.io.ioexception; import javax.swing.jfilechooser; /** * * @author Ratna */ public class filechooser { public static String test() throws IOException { String str = "";
JFileChooser chooser=new JFileChooser(); int returnval = chooser.showopendialog(null); if(returnval == JFileChooser.APPROVE_OPTION) { File f = chooser.getselectedfile(); BufferedReader br=new BufferedReader(new FileReader(f)); String st=""; while((st=br.readline())!=null){ str += st+"\n"; return str; static void main(string string) { throw new UnsupportedOperationException("Not yet implemented"); ifprime.java package ferluleapp; /** * * @author Ratna */ public class ifprime { //fungsi untuk metode Fermat public static boolean isfermat(int prime){ boolean isfermat = false; for (int i = 1 ; i < prime ; i++){ if(basic.modexp(i, (prime-1), prime) == 1){ isfermat = true; else { return isfermat; //fungsi untuk metode Lucas-Lehmer public static int islule(int x){ boolean islule = false; int keymp = 0; boolean ismerseneprime = false; int mp = basic.mathpow(2, x) - 1; int s = 4; //int n = 0; if (prime.isprime(mp) == true){ ismerseneprime= true;
for ( int i = 3 ; i <= x ; i++){ n++; s = ((basic.mathpow(s, 2)) - 2 ) % mp; if( s == 0 && ismerseneprime == true){ keymp = mp; return keymp; keygenerator.java package ferluleapp; import java.util.random; /** * * @author Ratna */ //class untuk membangkitkan kunci berdasarkan Fermat atau Lucas- Lehmer public class keygenerator { public static int keygenfermat(){ int s = 0, t = 0, keyp = 0; for ( int i = 0 ; i < 5000 ; i++){ s = prime.primegenerator(); //System.out.println("s : "+s+" : "+ifprime.isfermat(s)+" : "+prime.issecureprime(s)); if( prime.isprime(s) == true ){ if ( ifprime.isfermat(s) == true && prime.issecureprime(s) == true && s > 100 ){ keyp = s; else { continue; return keyp; public static int keygenlule(){ int keyp = 0, t = 0; Random generator = new Random(); for ( int i = 0 ; i < 50 ; i++){ t = generator.nextint(50)+1; if ( prime.isprime(t) == true) { if (t==31){ continue; if ( ifprime.islule(t)!= 0 && ifprime.islule(t) > 255 ){ keyp = ifprime.islule(t);
else if ( ifprime.islule(t) == 0) { keyp = 0; return keyp; Prime.java package ferluleapp; import java.util.random; /** * * @author Ratna */ public class prime { //fungsi untuk mengecek bilangan prima public static boolean isprime(int p){ boolean prime = false; int c = 0; int b = 1; for (int i = 0 ; i < p ; i++){ b = b + 1; c = p % b; if ( c == 0 ){ if ( p == b ){ prime = true; else { prime = false; return prime; public static boolean isprimedouble(double p){ boolean prime = false; double c = 0; int b = 1; for (int i = 0 ; i < p ; i++){ b = b + 1; c = p % b;
if ( c == 0 ){ if ( p == b ){ prime = true; else { prime = false; return prime; //fungsi untuk mengecek bilangan prima aman public static boolean issecureprime(int x){ int q = 0 ; q = ( x - 1 ) / 2; if( isprime(q) == true ){ return true; else { return false; //fungsi untuk membangkitkan bilangan acak public static int primegenerator(){ Random generator = new Random(); int r = generator.nextint(5000)+256; return r; // fungsi untuk melakukan proses enkripsi //fungsi untuk mengecek bilangan primitif public static int isprimitif(int keyp){ int q = 0; int alpha = 0; int alphas = 0 ; int alphaq = 0; int tempprim = 0; Boolean isprim = false; Random gen = new Random(); for ( int i = 0 ; i < keyp-2 ; i++ ){ tempprim = gen.nextint(keyp-2) + 1; q = (keyp - 1) / 2; alphas = basic.modexp(tempprim, 2, keyp); alphaq = basic.modexp(tempprim, q, keyp); if ( (alphas == 1 && alphaq == 1) (alphas == 1 alphaq == 1) ){ isprim = false; else { isprim = true; alpha = tempprim;
return alpha;
LAMPIRAN B : TABEL KODE KARAKTER KODE KARAKTER KODE KARAKTER KODE KARAKTER 00 <spasi> 34 j 68 R 01 1 35 k 69 S 02 2 36 l 70 T 03 3 37 m 71 U 04 4 38 n 72 V 05 5 39 o 73 W 06 6 40 p 74 X 07 7 41 q 75 Y 08 8 42 r 76 Z 09 9 43 s 77, 10 0 44 t 78. 11-45 u 79 / 12 = 46 v 80 ; 13! 47 w 81 14 @ 48 x 82 [ 15 # 49 y 83 ] 16 $ 50 z 84 \ 17 % 51 A 85 < 18 ^ 52 B 86 > 19 & 53 C 87? 20 * 54 D 88 : 21 ( 55 E 89 22 ) 56 F 90 { 23 _ 57 G 91 24 + 58 H 92 25 a 59 I 93 ` 26 b 60 J 94 ~ 27 c 61 K 95 28 d 62 L 96
KODE KARAKTER KODE KARAKTER KODE KARAKTER 29 e 63 M 97 30 f 64 N 98 31 g 65 O 99 β 32 h 66 P 33 i 67 Q
CURRICULUM VITAE Nama Alamat Sekarang Alamat Orang Tua : Ratnaningtyas Yoga Wijayanti : Jl. Merak 2 No.80 Ling.XIV Perum Sri Gunting : Jl. Merak 2 No.80 Ling.XIV Perum Sri Gunting Telp/Hp : 08982860604 Email : na.ningtyas90@gmail.com Riwayat Pendidikan SD Negeri III Ketaon dari Tahun 1996 s/d Tahun 2002 SMP Negeri 1 Banyudono dari Tahun 2002 s/d Tahun 2004 SMP Swasta Raksana Medan dari Tahun 2004 s/d Tahun 2005 SMA Swasta Raksana Medan dari Tahun 2005 s/d Tahun 2008 Mahasiswa Ilmu Komputer USU dari Tahun 2008 s/d Tahun 2013 Keahlian/Kursus yang diikuti: 1. Bahasa Inggris 2. Bahasa Pemograman Java