Tuesday 23 July 2013

Jumpa lagi kawan,,,
Setelah kita memahami konsep kriptografi Elgamal (baca disini dan disini), maka saatnya kita mengimplementasikan pemahaman kita pada sebuah bahasa pemrograman. Dalam hal in kita akan mengimplementasikannya ke bahasa pemrograman Java. Baiklah, mari ikuti langkah-langkah berikut.
  1. Buka Netbeans kesayangan kawan-kawan dan buat project baru.
  2. Pertama kita akan membuat class untuk proses pembentukan kunci.
     package newcode;  
     import java.math.BigInteger;  
     /**  
      *  
      * @author isahroni  
      */  
     public class BuatKunci {  
       private BigInteger y;  
       private boolean cek;  
       private int bilanganPrima;  
       public BigInteger getKunci(BigInteger p, BigInteger g, BigInteger x) {  
         y = g.modPow(x, p);  
         return y;  
       }  
       public void setPrima(int bilanganPrima) {  
         this.bilanganPrima = bilanganPrima;  
       }  
       public boolean isPrima() {  
         for (int i = 3; i < bilanganPrima; i += 2) {  
           if (bilanganPrima % i == 0) {  
             cek = false;  
             break;  
           } else {  
             cek = true;  
           }  
         }  
         return cek;  
       }  
     }  
    
  3. Kemudian class untuk proses membuat bilangan acak.
     package newcode;  
     import java.math.BigInteger;  
     import java.util.ArrayList;  
     /**  
      *  
      * @author isahroni  
      */  
     public class BilanganAcak {  
       private ArrayList listNumber = new ArrayList();  
       public ArrayList getBilanganAcak(String pesan, BigInteger p) {  
         int pp = p.intValue() - 2;  
         for (int i = 0; i < pesan.length(); i++) {  
           int rand = (int) (pp * Math.random());  
           listNumber.add(rand);  
         }  
         return listNumber;  
       }  
     }  
  4. Berikutnya class untuk proses konversi karakter ke ASCII.
     package newcode;  
     import java.util.ArrayList;  
     /**  
      *  
      * @author isahroni  
      */  
     public class KonversiChar {  
       private ArrayList listChar = new ArrayList();  
       public ArrayList getCharASCII(String pesan) {  
         for (int i = 0; i < pesan.length(); i++) {  
           char chr = pesan.charAt(i);  
           int in = chr;  
           listChar.add(in);  
         }  
         return listChar;  
       }  
     } 
  5. Selanjutnya class untuk proses enkripsi dan dekripsi.
     package newcode;  
     import java.math.BigInteger;  
     /**  
      *  
      * @author isahroni  
      */  
     public class EnkripDekrip {  
       private BigInteger gamma;  
       private BigInteger delta;  
       private char chr;  
       public String getEnkripsi(String chrASCII, String rnd, BigInteger g,  
           BigInteger p, BigInteger y, String pesan) {  
         for (int i = 0; i < pesan.length(); i++) {  
           BigInteger m = new BigInteger(chrASCII);  
           BigInteger k = new BigInteger(rnd);  
           gamma = g.modPow(k, p);  
           delta = y.pow(k.intValue()).multiply(m).mod(p);  
         }  
         return gamma.toString() + " " + delta.toString()+" ";  
       }  
       public char getDekripsi(String nGamma, String nDelta,  
           BigInteger p, BigInteger x, String pesan) {  
         for (int i = 0; i < pesan.length(); i++) {  
           BigInteger a = new BigInteger(nGamma);  
           BigInteger b = new BigInteger(nDelta);  
           BigInteger m = b.multiply(a.pow(p.intValue() - 1 - x.intValue())).mod(p);  
           int ma = m.intValue();  
           chr = (char) ma;  
         }  
         return chr;  
       }  
     }  
    
  6. Kemudian class untuk proses memecah chiper.
     package newcode;  
     import java.util.ArrayList;  
     /**  
      *  
      * @author isahroni  
      */  
     public class PecahChiperText {  
       private String pecah[];  
       private ArrayList pGamma = new ArrayList();  
       private ArrayList pDelta = new ArrayList();  
       public void setChiper(String chiper) {  
         pecah = chiper.split(" ");  
         for (int i = 0; i < pecah.length; i++) {  
           if (i % 2 == 0) {  
             pGamma.add(pecah[i]);  
           } else {  
             pDelta.add(pecah[i]);  
           }  
         }  
       }  
       public ArrayList getGamma() {  
         return pGamma;  
       }  
       public ArrayList getDelta() {  
         return pDelta;  
       }  
     } 
  7. Langkah terakhir buat class main untuk menguji algoritma yang kita buat.
     package newcode;  
     import java.math.BigInteger;  
     import java.util.ArrayList;  
     /**  
      *  
      * @author isahroni  
      */  
     public class Main {  
       private static BigInteger p, g, y, x;  
       public static void main(String[] args) {  
         String pesan = "hello";  
         String chiper = "";  
         String hasilEnkrip = "";  
         BuatKunci bk = new BuatKunci();  
         KonversiChar converter = new KonversiChar();  
         BilanganAcak number = new BilanganAcak();  
         EnkripDekrip ed = new EnkripDekrip();  
         p = new BigInteger("2903");  
         g = new BigInteger("6");  
         x = new BigInteger("1794");  
         if (p.intValue() < 225) {  
           System.out.println("Bilangan Harus Lebih Besar Dari 255");  
         } else if (g.intValue() < 1 | g.intValue() >= p.intValue() - 1) {  
           System.out.println("Nilai g : 1 < g <= p-1");  
         } else if (x.intValue() < 1 | x.intValue() >= p.intValue() - 2) {  
           System.out.println("Nilai x : 1 < x <= p-2");  
         } else {  
           bk.setPrima(p.intValue());  
           if (bk.isPrima() == false) {  
             System.out.println(p + " bukan bilangan prima");  
           } else {  
             y = bk.getKunci(p, g, x);  
             System.out.println("Kunci Public : " + p + "," + g + "," + y);  
             System.out.println("Kunci Private : " + x + "\n");  
             //konversi char ke ASCII  
             ArrayList chr = converter.getCharASCII(pesan);  
             //membuat nilai random  
             ArrayList rn = number.getBilanganAcak(pesan, p);  
             System.out.println("Pesan\tASCII\tNilai Random");  
             for (int i = 0; i < pesan.length(); i++) {  
               char c = pesan.charAt(i);  
               System.out.println(c + "\t" + chr.get(i).toString()  
                   + "\t" + rn.get(i));  
             }  
             //==============================================================  
             //Proses Enkripsi  
             System.out.println("\n+++++ENKRIPSI+++++");  
             for (int i = 0; i < pesan.length(); i++) {  
               chiper = ed.getEnkripsi(chr.get(i).toString(),  
                   rn.get(i).toString(), g, p, y, pesan);  
               hasilEnkrip += chiper;  
             }  
             System.out.print("Chiper : " + hasilEnkrip);  
             //Akhir dari proses Enkripsi  
             //==============================================================  
             System.out.println();  
             //==============================================================  
             //Proses Dekripsi  
             System.out.println("\n+++++DEKRIPSI+++++");  
             PecahChiperText pct = new PecahChiperText();  
             pct.setChiper(hasilEnkrip);  
             ArrayList ngama = pct.getGamma();  
             ArrayList ndelta = pct.getDelta();  
             //Mengambil nilai gamma dan delta  
             System.out.println("Gamma\tDelta");  
             for (int i = 0; i < pesan.length(); i++) {  
               System.out.println(ngama.get(i) + "\t" + ndelta.get(i));  
             }  
             //--------------------------------------------------------------  
             String hasilDekrip = "";  
             for (int i = 0; i < pesan.length(); i++) {  
               char dek = ed.getDekripsi(ngama.get(i).toString(),  
                   ndelta.get(i).toString(), p, x, chiper);  
               hasilDekrip += dek;  
             }  
             System.out.println("\nPesan : " + hasilDekrip);  
             //Akhir dari proses Dekripsi  
             //==============================================================  
           }  
         }  
       }  
     }  
    
Jalankan program kawan-kawan.
Capture2Capture3
Nah, begitulah kira-kira hasil implementasi Algoritma kriptografi Elgamal ke bahasa pemrograman Java.
Download file latihannya disini.
Posted by Unknown On 02:10 No comments

0 comments:

Post a Comment

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin
  • Youtube

Recent Post

Entri Populer

Total Pageviews

Visitor



Flag Counter

    About

    Orang yang berilmu mengetahui orang yang bodoh karena dia pernah bodoh, sedangkan orang yang bodoh tidak mengetahui orang yang berilmu karena dia tidak pernah berilmu.