Kriptografi Elgamal With Java

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.
    Capture1
  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.

8 thoughts on “Kriptografi Elgamal With Java

  1. gan, kalo elgamal untuk bahasa pemrograman android ada ga ya gan..
    kalo ada tlg kirim ke email ane dong gan..

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s