LAMPIRAN A : LISTING PROGRAM

dokumen-dokumen yang mirip
Percabangan & Perulangan

STUDI, IMPLEMENTASI, DAN PERBANDINGAN ALGORITMA KUNCI PUBLIK NTRU DENGAN ALGORITMA KUNCI PUBLIK RSA

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA FAKULTAS ILMU KOMPUTER UNIVERSITAS BRAWIJAYA

PEMROGRAMAN JAVA. Yoannita, S.Kom. Input Kondisi (IF-ELSE, SWITCH)

1. Mana diantara pilihan-pilihan berikut ini yang merupakan penulisan loop yang benar?

Algoritma Kriptografi Kunci-publik RSA menggunakan Chinese Remainder Theorem

Metode Insertion Sort di Java Console

Mata Kuliah : Pemrograman Berbasis Objek Pertemuan : 4

Pertemuan 3 Struktur Perulangan pada Java

LAMPIRAN A : LISTING PROGRAM

LAPORAN PRAKTIKUM PEMROGRAMAN DASAR TIPE-TIPE FUNGSI ATAU METHOD

LAMPIRAN A. Universitas Sumatera Utara

Integrasi Kriptografi Kunci Publik dan Kriptografi Kunci Simetri

BAB IV PERANCANGAN. proses utama yaitu pembentukan kunci, proses enkripsi dan proses dekripsi.

BAB I PENDAHULUAN. melalui ringkasan pemahaman penyusun terhadap persoalan yang dibahas. Hal-hal

Pertemuan 2 Struktur Kontrol Percabangan

DASAR PEMOGRAMAN JAVA

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PENGENALAN OBJECT ORIENTED PROGRAMMING

PENERAPAN TEKNIK ENSKRIPSI EL GAMAL PADA APLIKASI JASA PENGIRIMAN MENGGUNAKAN BAHASA PEMROGRAMAN C#

BAB II VARIABEL DAN TIPE DATA

2 TIPE DATA DAN VARIABEL

PRAKTIKUM PEMROGRAMAN LANJUT MODUL 1

UAS JAVAUAS JAVA. Fibonaci Naik :

TPI4202 e-tp.ub.ac.id. Lecture 4 Mas ud Effendi

Vigenere Minimum-Prime Key-Adding Cipher

ENKRIPSI CITRA BITMAP MELALUI SUBSTITUSI WARNA MENGGUNAKAN VIGENERE CIPHER

PEMOGRAMAN JAVA. Yoannita. Tipe Data (ii) : Array Exception Handling

BAB 1 KONSEP DASAR JAVA

Obyektif : KONTROL ALUR PROGRAM

LAPORAN PRAKTIKUM ALGORITMA DAN PEMROGRAMAN ( Implementasi Rekursi Pada Java)

Aplikasi Algoritma Brute Force Pada Knight s Tour Problem

Penerapan ECC untuk Enkripsi Pesan Berjangka Waktu

SUMBER BELAJAR PENUNJANG PLPG

PEMAHAMAN DASAR DASAR JAVA

BAHASA PEMROGRAMAN JAVA

LAB PEMROGRAMAN I (JAVA FUNDAMENTAL) PERTEMUAN 3 Dosen : Bella Hardiyana S. Kom

MODUL 5 PERULANGAN A. WHILE

Metode Sequential Searching di Java Console

Pertemuan 2 (2) : Membuat Class dan mengakses Anggota Class

Struktur Kontrol Pemrograman Java : PERCABANGAN

PEMROGRAMAN JAVA : VARIABEL DAN TIPE DATA

LAMPIRAN A: SOURCE CODE PROGRAM CLASS METODE

Variabel tersebut seharusnya bisa dideklarasikan didalam try block dan block catch

Waktu Sisa : 0:43:4. Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum. Mengerjakan finally. Diluar block

Modul 3 Flow Control dan Input

Cara Membaca File Text di JAVA

Exception adalah penanda bahwa kondisi/kejadian yang tidak diinginkan telah terjadi pada program kita. Ada 2 jenis exception (+1 Error):

Program Java Sesi 1. Arief Susanto

Identifier, Keywords, Variabel, Tipe Data Primitif dan Operator PBO. Ramos Somya

BAB 3 TYPE DATA, VARIABLE DAN OPERATOR

BAB III ANALISIS DAN DESAIN SISTEM

Perbandingan Penggunaan Bilangan Prima Aman Dan Tidak Aman Pada Proses Pembentukan Kunci Algoritma Elgamal

if (ekspresi_boolean) { Pernyataan1; } else { Pernyataan2; }

BAB 5 Mendapatkan Input dari Keyboard

BAB 5 Mendapatkan Input dari Keyboard

Topik. Stream I/O Cara menggunakan Stream Hierarchy Java I/O Membaca File Menulis File Menghapus File Cara membaca isi Direktori dalam file

BAB I PENDAHULUAN. Pada era teknologi informasi yang semakin berkembang, pengiriman data

Pemrograman. Pertemuan-3 Fery Updi,M.Kom

Latar Belakang Masalah Landasan Teori

Method. Pemrograman Dasar Sistem Informasi PTIIK Herman Tolle

BAB 2 INPUT DARI KEYBOARD

2. Pilih instruksi yang dapat digunakan dalam method actionperformed untuk membedakan antara tombol buttonone dan buttontwo.

Kriptografi untuk Huruf Hiragana

TUGAS 1: WIN OR LOSE. package kartu; import java.util.random; public class kartu { /** args the command line arguments

IMPLEMENTASI KRIPTOGRAFI DAN STEGANOGRAFI DENGAN MENGGUNAKAN ALGORITMA RSA DAN MEMAKAI METODE LSB

Bab 2 Tinjauan Pustaka 2.1 Penelitian Terdahulu

HASIL DAN PEMBAHASAN. Algoritma Modular Exponentiation mempunyai kompleksitas sebesar O((lg n) 3 ) (Menezes et al. 1996).

Praktikum Algoritma dan Setruktur Data

Tidak ada satupun dari pilihan di atas yang benar karena checked exception tidak bisa ditulis

Elemen Dasar Dalam Bahasa Java

Perbandingan Algoritma Kunci Nirsimetris ElGammal dan RSA pada Citra Berwarna


Politeknik Elektronika Negeri Surabaya

STUDI DAN IMPLEMENTASI TANDATANGAN DIGITAL DENGAN MENGGUNAKAN ALGORITMA ELGAMAL

KOMBINASI ALGORITMA RSA DAN ELGAMAL DALAM IMPLEMENTASI ALGORITMA KRIPTOGRAFI SKRIPSI HASNAN AULIA HAQ

Keamanan Sistem Informasi. Girindro Pringgo Digdo

BAB I PENDAHULUAN. mempunyai makna. Dalam kriptografi dikenal dua penyandian, yakni enkripsi

BAB III PERANCANGAN DAN IMPLEMENTASI

Decision and Looping

Pemograman Java. Input(ii) String Function Pengulangan(FOR-While-DoWhile) Yoannita, S.Kom

Perulangan / Looping

Belajar Rekursif di Java

Tipe if : If tanpa else (if) If dengan else (if-else) Nested if

Bahasa Pemrograman :: Dasar Pemrograman Java

Modul Praktikum 3 Pemograman Berorientasi Objek

Analisis dan Perbandingan Kecepatan Algoritma RSA dan Algoritma ElGamal

RC4 Stream Cipher. Endang, Vantonny, dan Reza. Departemen Teknik Informatika Institut Teknologi Bandung Jalan Ganesha 10 Bandung 40132

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

ABSTRACTION, ENCAPSULATION, INHERITANCE & POLYMORPHISM

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

Badiyanto, S.Kom., M.Kom. PBO java

1. Apa yang harus dilakukan oleh programmer untuk menangani user-defined exception? Menuliskan exception sebagai start method

Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum

BAB 3 KRIPTOGRAFI RSA

Politeknik Elektronika Negeri Surabaya

Percabangan & Perulangan

Chapter 12.1: package chapter.pkg12; /** * Advan */ import java.util.random; import static java.lang.system.out; public class Chapter12 {

Transkripsi:

57 LAMPIRAN A : LISTING PROGRAM /* * Source Code Program Algoritma Kombinasi RSA dan ElGamal * oleh : * Nama : Hasnan Aulia Haq * NIM : 100823019 * Prodi : Ekstensi Matematika * Jurusan : Matematika FMIPA USU 2010 * */ package rsaelgamal; import java.math.biginteger; import java.util.random; import java.io.*; public class Kombinasi { private BigInteger p; private BigInteger q; private BigInteger N; private BigInteger g; private BigInteger phi; private BigInteger x; private BigInteger e; private BigInteger y; private BigInteger d; private BigInteger c; public static BigInteger ZERO = BigInteger.ZERO; public static BigInteger ONE = new BigInteger ("1"); public static BigInteger TWO = new BigInteger ("2"); private BigInteger batas = new BigInteger ("256"); private Random r; public Kombinasi() { r = new Random(); p = PrimaAman(batas); q = PrimaAman(batas); while (p.compareto(q)==0){ p = PrimaAman(batas); q = PrimaAman(batas); N = p.multiply(q); g = Primitif (N); e = PrimaAman(batas.divide(TWO)); x = PrimaAman(batas.divide(TWO));

58 phi = p.subtract(biginteger.one).multiply (q.subtract(biginteger.one)); while (N.gcd(e).compareTo(BigInteger.ONE) == 1 && e.compareto(n) == 1 ) { e.add(biginteger.one); while (N.gcd(x).compareTo(BigInteger.ONE) == 1 && x.compareto(n) == 1 ) { x.add(biginteger.one); while (N.gcd(g).compareTo(BigInteger.ONE) == 1 && g.compareto(n) == 1 ) { g.add(biginteger.one); d = e.modinverse(phi); y = g.modpow(x, N); public static void header (){ System.out.println ("***************************************"); System.out.println ("* Program Pesan Rahasia *"); System.out.println ("* Dgn Algoritma Kombinasi RSA-ElGamal *"); System.out.println("* *"); System.out.println ("* Copyright (c) 2012 Hasnan Aulia Haq *"); System.out.println ("* Program Studi Ekstensi Matematika FMIPA USU *"); System.out.println ("*************************************** ); System.out.println (""); System.out.println (""); public static int CekPrima(BigInteger a){ int cekprima; BigInteger b,c; b=one; do{ b=b.add(one); c=a.mod(b); while (c.compareto(zero)>0); if (a.compareto(b)==0) cekprima=1; else cekprima=0; return cekprima;

59 public static BigInteger PrimaAman(BigInteger batas){ BigInteger rand; Random r= new Random(); do{ rand = new BigInteger(10,r); while (rand.compareto(batas) == 1); BigInteger p; int cekprima; do{ int cekpri; do { rand=rand.add(one); cekpri = CekPrima(rand); while (cekpri==0); p = (TWO.multiply(rand).add(ONE)); cekprima=cekprima(p); while (cekprima==0); return p; public static int CekPrimitif (BigInteger alpha, BigInteger p){ int cekprimitif; BigInteger b,q; q = (p.subtract(one).divide(two)); b = alpha.modpow(two, p); if (b.compareto(one)==0){ cekprimitif = 0; else { b= alpha.modpow(q, p); if (b.compareto(one)==0){ cekprimitif = 0; else { cekprimitif = 1; return cekprimitif; public static BigInteger Primitif(BigInteger p) { BigInteger alfa; Random r= new Random(); BigInteger nilaik; do {

60 do{ nilaik = new BigInteger(10,r); while (nilaik.compareto(p) == 1); alfa = nilaik.add(one); while (CekPrimitif(alfa,p) < 1); return alfa; public static void cetakkunci(biginteger N, BigInteger e, BigInteger x, BigInteger d, BigInteger y, BigInteger g){ System.out.println("Kunci Publik (N, e, x ) = (" + N +", "+ e +", "+ x +")"); System.out.println("Kunci Privat (d,y) = (" + d +", "+ y +")"); System.out.println("Bilangan acak g = " + g); // for mencetak ascii public static void stringkeascii (byte[] m){ System.out.println("Plainteks :"); for (int i=0; i<m.length;i++){ System.out.println ("\tm"+i+" = " +m [i]); public static void cetakchiper (BigInteger [][] a){ System.out.println("Chiperteks (c1,c2) :"); for (int i=0; i<a.length;i++){ System.out.println("\tm"+i+"("+ a [i][0]+ ","+ a [i][1]+")"); public static void cetakdekripsi (BigInteger [] dekripsi){ System.out.println("Hasil Dekripsi :"); for (int i=0; i<dekripsi.length;i++){ System.out.println ("\tm"+i+" = "+dekripsi[i]+" "); System.out.print("Pesan Asli = "); for (int i=0; i<dekripsi.length;i++){ String xs=string.valueof(dekripsi[i]); int x = Integer.valueOf(xS); System.out.print((char) x);

61 public BigInteger [][] Enkripsi (byte[] m, BigInteger y, BigInteger e,biginteger N,BigInteger g){ BigInteger [][] chiper = new BigInteger [m.length][2]; // For Enkripsi for (int i=0; i<m.length;i++){ // mendapatkan BigInteger m BigInteger me = new BigInteger(String.valueOf(m[i])); // mendapatkan nilai acak c c = PrimaAman(batas.divide(TWO)); // mencari nilai minus c BigInteger minc = c.negate(); chiper [i][0] = ((me.multiply(y.modpow(minc, N))).modPow(e, N).mod(N)); chiper [i][1] = g.modpow(c, N); return chiper; private BigInteger[] dekripsi (BigInteger[][] chiper1, BigInteger d, BigInteger x, BigInteger N) { BigInteger[] dekripsi = new BigInteger [chiper1.length]; // For Dekripsi for (int i=0; i<chiper1.length;i++){ BigInteger a = chiper1 [i][0]; BigInteger b = chiper1 [i][1]; dekripsi [i] = ((a.modpow(d, N).multiply(b.modPow(x, N))).mod(N)); return dekripsi; public static void main (String[] args) throws IOException { Kombinasi Kombinasi = new Kombinasi(); BigInteger p = Kombinasi.p; BigInteger q = Kombinasi.q; BigInteger N = Kombinasi.N; BigInteger g = Kombinasi.g; BigInteger e = Kombinasi.e; BigInteger x = Kombinasi.x; BigInteger phi = Kombinasi.phi;

62 BigInteger d = Kombinasi.d; BigInteger y = Kombinasi.y; DataInputStream in=new DataInputStream(System.in); String teststring; header (); cetakkunci(n,e,x,d,y,g); // memasukkan plaintext System.out.println("Masukkan pesan yang akan di enkripsi :"); System.out.print("Pesan = "); teststring=in.readline(); byte [] m = teststring.getbytes(); System.out.println("Jumlah Plainteks " + m.length+ " huruf"); // mencetak nilai ascii plainteks stringkeascii(m); // Enkripsi BigInteger [][] chiper = Kombinasi.Enkripsi(m,y,e,N,g); cetakchiper(chiper); // DEKRIPSI BigInteger [] dekripsi = Kombinasi.dekripsi(chiper, d, x, N); // mencetak hasil Dekripsi cetakdekripsi(dekripsi);

63 LAMPIRAN B : TABEL ASCII KODE ASCII ( 0 127 )

64 KODE ASCII Extendeed ( 128 255 )