DAFTAR PUSTAKA Ariyus, Dony. 2009. Keamanan Multimedia. Yogyakarta : Penerbit Andi Bahri, Saipul, Dian, dan PS, Susan Dian. April 2012. Studi Dan Implementasi Pengamanan Basis Data Menggunakan Metode Enkripsi MD5. Bina Darma. Vol. X, No. X. http://eprints.binadarma.ac.id/258/1/jurnal%20studi%20dan%20implemen TASI%20PENGAMANAN%20BASIS%20DATA%20MENGGUNAKAN%20MET ODE%20ENKRIPSI%20MD5.pdf. 04 Desember 2016. Komputer, Wahana Semarang. 2004. Memahami Model Enkripsi dan Security Data. Yogyakarta: Penerbit Andi. Komputer, Wahana Semarang. 2006. Membuat Aplikasi Database Dengan Java 2. Yogyakarta: Penerbit Andi. Komputer, Wahana Semarang. 2009. Menguasai Java Programming. Jakarta: Penerbit Salemba Infotek. Komputer, Wahana. 2010. The Best Encryption Tools. Jakarta: PT Elex Media Komputindo. Kromodimoeljo, Sentot. 2009. Teori dan Aplikasi Kriptografi. penerbit SPK IT Consulting Ladjamuddin B, Al-Bahra. 2006. Rekayasa Perangkat Lunak. Yogyakarta: Graha Ilmu. Munir, Rinaldi. 2006. Kriptografi. Bandung: Informatika. Nugroho, Adi. 2005. Analisis Dan Perancangan Sistem Informasi Dengan Metodologi Berorientasi Objek. Bandung: Informatika. Pressman, Roger S. 2002. Rekayasa Perangkat Lunak Buku 1. Yogyakarta: Penerbit Andi. Utami, Ema. 2008. RDBMS Menggunakan MS SQL SERVER 2000. Yogyakarta: Graha Ilmu. 100
Sumber lain : https://en.wikipedia.org/wiki/intellij_idea https://id.wikipedia.org/wiki/kata_sandi https://id.wikipedia.org/wiki/sandi_caesar 101
LAMPIRAN 1. Class Cesarchiper public class Caesarchiper { private static String Huruf = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static String Angka = "0123456789"; public static String enkripsi(string Plaintext, int Kunci) { String hasil = ""; int kuncihuruf = Kunci % Huruf.length(); if (kuncihuruf == 0) kuncihuruf = 1; int kunciangka = Kunci % Angka.length(); if (kunciangka == 0) kunciangka = 1; for(int i=0; i<plaintext.length(); i++){ char teksterinput = Plaintext.charAt(i); if(character.isletter(teksterinput)){ char hurufkapital = Character.toUpperCase(teksTerinput); for (int a=0; a<huruf.length(); a++){ if(hurufkapital == Huruf.charAt(a)){ int ab = (a + kuncihuruf) % Huruf.length(); char hasilenkripsihuruf = Huruf.charAt(ab); if(character.islowercase(teksterinput)){ hasil = hasil +Character.toLowerCase(hasilEnkripsiHuruf); else{ hasil = hasil + hasilenkripsihuruf; else if(character.isdigit(teksterinput)){ for (int b=0; b<angka.length(); b++){ if(teksterinput == Angka.charAt(b)){ int bc = (b + kunciangka) % Angka.length(); hasil = hasil + Angka.charAt(bc); else { hasil = hasil + teksterinput; return hasil; public static String dekripsi(string Ciphertext, int Kunci){ String hasil = ""; int kuncihuruf = Kunci % Huruf.length(); if(kuncihuruf == 0) kuncihuruf = 1; int kunciangka = Kunci % Angka.length(); if(kunciangka == 0) kunciangka = 1; for (int i=0; i<ciphertext.length(); i++){ char teksterinput = Ciphertext.charAt(i); if(character.isletter(teksterinput)){ char hurufkapital = Character.toUpperCase(teksTerinput); for (int a=0; a<huruf.length(); a++){ if(hurufkapital == Huruf.charAt(a)){ int ab = (Huruf.length()+ a - kuncihuruf) % Huruf.length(); char hasildekripsihuruf = Huruf.charAt(ab); if(character.islowercase(teksterinput)){ hasil = hasil + Character.toLowerCase(hasilDekripsiHuruf); L1
else{ hasil = hasil + hasildekripsihuruf; else if(character.isdigit(teksterinput)){ for (int b=0; b<angka.length(); b++){ if(teksterinput == Angka.charAt(b)){ int bc = (Angka.length() + b - kunciangka) % Angka.length(); hasil = hasil + Angka.charAt(bc); else{ hasil = hasil + teksterinput; return hasil; 2. Class BasisData import java.sql.*; public class BasisData { public static Connection database; public static Statement statementhelper; public static Connection getdatabase() { return database; public static Statement getstatementhelper() { return statementhelper; public static void connect() throws ClassNotFoundException, SQLException{ if (database == null){ Class.forName("com.mysql.jdbc.Driver"); database = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_aplikasi", "root", ""); statementhelper = database.createstatement(); public static int user(string username, String password, String email, String nama_lengkap, String tanggal_lahir, String asal_kota, char jenis_kelamin, String alamat, String kode_pos, String handphone) throws SQLException{ Statement hitunguser = getstatementhelper(); ResultSet hasil = hitunguser.executequery("select COUNT(*) AS TOTAL FROM table_user"); int no_registrasi = 0; while (hasil.next()){ no_registrasi = hasil.getint("total") + 1; String sql_query = "INSERT INTO table_user VALUES (" + L2
"'," + no_registrasi) + String.valueOf(no_registrasi) + "," + "'" + Caesarchiper.enkripsi(username, no_registrasi) + "'," + "'" + username + "'," + "'" + Caesarchiper.enkripsi(password, no_registrasi) + + "'" + password + "'," + "'" + Caesarchiper.enkripsi(email, no_registrasi) + "'," "'" + email + "'," + "'" + nama_lengkap + "'," + "'" + Caesarchiper.enkripsi(tanggal_lahir, "'," + "'" + tanggal_lahir + "'," + "'" + asal_kota + "'," + "'" + jenis_kelamin + "'," + "'" + alamat + "'," + "'" + kode_pos + "'," + "'" + Caesarchiper.enkripsi(handphone, no_registrasi) + "'," + "'" + handphone + "')"; return getstatementhelper().executeupdate(sql_query); public static HasilLogin login(string username, String password) throws SQLException{ int no_registrasi = 0; String dekripsi_username = ""; String dekripsi_password = ""; HasilLogin hasil = new HasilLogin(); Statement pilih = getstatementhelper(); ResultSet hasil_pilih = pilih.executequery("select no_registrasi, " + "username_cipher, " + "password_cipher, " + "email_cipher, " + "nama_lengkap, " + "tanggal_lahir_cipher, " + "asal_kota, " + "jenis_kelamin, " + "alamat, " + "kode_pos, " + "handphone_cipher " + "FROM table_user"); while (hasil_pilih.next()) { no_registrasi = hasil_pilih.getint("no_registrasi"); dekripsi_username = Caesarchiper.dekripsi(hasil_pilih.getString("username_cipher"), no_registrasi); dekripsi_password = Caesarchiper.dekripsi(hasil_pilih.getString("password_cipher"), no_registrasi); if ((username.equals(dekripsi_username)) && (password.equals(dekripsi_password))){ hasil.issucces = true; return hasil; return hasil; public static boolean validasidatabase(string username) throws L3
SQLException { Statement cariusername = getstatementhelper(); ResultSet cari = cariusername.executequery("select no_registrasi, username_cipher FROM table_user"); while (cari.next()) { int no_registrasi = cari.getint("no_registrasi"); String username_cipher = cari.getstring("username_cipher"); String username_real = Caesarchiper.dekripsi(username_cipher, no_registrasi); if (username_real.equals(username)) { return false; return true; 3. Class HasilLogin public class HasilLogin { public boolean issucces = false; 4. Halaman Utama import com.alee.laf.weblookandfeel; import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.sql.sqlexception; /** * Created by ari on 10/3/2016. */ public class HalamanUtama { private static JFrame frame; private JPanel panelutama; public JPanel getpanelutama() { return panelutama; public static void main (String[] args) { try { BasisData.connect(); catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(frame, e.getlocalizedmessage(), "class tidak ditemukan", JOptionPane.ERROR_MESSAGE); catch (SQLException e) { JOptionPane.showMessageDialog(frame, e.getsqlstate() + "Gagal dijalankan", "SQL Gagal dijalankan?", JOptionPane.ERROR_MESSAGE ); WebLookAndFeel.install(); JMenu menu = new JMenu("Menu"); JMenuItem menuutama = new JMenuItem("Home"); menu.add(menuutama); L4
JMenuItem menuregistrasi = new JMenuItem("Registration"); menu.add(menuregistrasi); JMenuItem menulogin = new JMenuItem("Login"); menu.add(menulogin); menu.addseparator(); JMenuItem menukeluar = new JMenuItem("Close"); menu.add(menukeluar); JMenu bantuan = new JMenu("Help"); JMenuItem menubantuan = new JMenuItem("About"); bantuan.add(menubantuan); JMenuBar menubar = new JMenuBar(); menubar.add(menu); menubar.add(bantuan); frame = new JFrame("Kriptografi"); frame.setcontentpane(new HalamanUtama().panelUtama); frame.setdefaultcloseoperation(windowconstants.exit_on_close); frame.setjmenubar(menubar); frame.setsize(410, 530); frame.setresizable(false); Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); frame.setlocation(dimension.width / 2 - frame.getsize().width / 2, dimension.height / 2 - frame.getsize().height / 2); frame.setvisible(true); menukeluar.addactionlistener(new ActionListener() { public void actionperformed(actionevent actionevent) { frame.dispose(); ); menuutama.addactionlistener(new ActionListener() { public void actionperformed(actionevent actionevent) { setcontentpane(new HalamanUtama().getPanelUtama()); ); menuregistrasi.addactionlistener(new ActionListener() { public void actionperformed(actionevent actionevent) { setcontentpane(new FormRegistration().getPanelRegist()); ); menulogin.addactionlistener(new ActionListener() { public void actionperformed(actionevent actionevent) { setcontentpane(new FormLogin(frame).getPanelLogin()); ); menubantuan.addactionlistener(new ActionListener() { public void actionperformed(actionevent actionevent) { setcontentpane(new FormAbout().getPanelAbout()); ); public static void setcontentpane(jpanel pane){ frame.setcontentpane(pane); frame.revalidate(); L5
frame.repaint(); 5. Halaman Registrasi import com.alee.extended.date.webdatefield; import javax.swing.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.sql.sqlexception; import java.text.dateformat; import java.text.simpledateformat; import java.util.arraylist; import java.util.calendar; import java.util.date; import java.util.list; public class FormRegistration { public JPanel panelregist; private JTextField txtpassword; private JButton btnreset; private JTextField txtemail; private JTextField txtusername; private JButton btnregister; private JTextField txtnamalengkap; private JComboBox cmbasalkota; private JComboBox cmbjeniskelamin; private JTextArea txtalamat; private JTextField txtkodepos; private JTextField txthp; private WebDateField DTTanggalLahir; public FormRegistration(){ DTTanggalLahir.setDateFormat(new SimpleDateFormat("EEEE, dd MMMM yyyy")); btnreset.addmouselistener(new MouseAdapter() { public void mouseclicked(mouseevent e) { super.mouseclicked(e); switch (JOptionPane.showConfirmDialog(panelRegist, "Anda yakin ingin mereset?", "Reset Formulir", JOptionPane.OK_CANCEL_OPTION)){ case JOptionPane.OK_OPTION: reset(); break; ); btnregister.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { try { if (BasisData.validasiDatabase(txtUsername.getText())) { if (validasi()) { String username = txtusername.gettext(); String password = txtpassword.gettext(); L6
String email = txtemail.gettext(); String nama_lengkap = txtnamalengkap.gettext(); DateFormat df = new SimpleDateFormat("dd MMMM yyyy"); Date date_tanggal_lahir = DTTanggalLahir.getDate(); String tanggal_lahir = df.format(date_tanggal_lahir); String asal_kota = cmbasalkota.getselecteditem().tostring(); char jenis_kelamin = ' '; switch (cmbjeniskelamin.getselectedindex()) { case 1: jenis_kelamin = 'P'; break; case 2: jenis_kelamin = 'W'; break; String alamat = txtalamat.gettext(); String kode_pos = txtkodepos.gettext(); String handphone = txthp.gettext(); try { switch (BasisData.user( username, password, email, nama_lengkap, tanggal_lahir, asal_kota, jenis_kelamin, alamat, kode_pos, handphone )) { case 1: JOptionPane.showMessageDialog(panelRegist, "Anda berhasil melakukan registrasi.\nsilakan Login.", "Informasi", JOptionPane.INFORMATION_MESSAGE); reset(); break; default: JOptionPane.showMessageDialog(panelRegist, "Anda gagal melakukan registrasi.", "Gagal Registrasi",JOptionPane.ERROR_MESSAGE); catch (SQLException e1) { JOptionPane.showMessageDialog(panelRegist, e1.getlocalizedmessage(), "Kesalahan SQL",JOptionPane.ERROR_MESSAGE); else { JOptionPane.showMessageDialog(panelRegist, "Username sudah ada. Pilih username lain.", "Kesalahan", JOptionPane.ERROR_MESSAGE); catch (SQLException e1) { JOptionPane.showMessageDialog(panelRegist, e1.getlocalizedmessage(), "Kesalahan SQL", JOptionPane.ERROR_MESSAGE); ); private void reset() { txtusername.settext(""); txtpassword.settext(""); L7
txtemail.settext(""); txtnamalengkap.settext(""); DTTanggalLahir.setText(""); cmbasalkota.setselectedindex(0); cmbjeniskelamin.setselectedindex(0); txtalamat.settext(""); txtkodepos.settext(""); txthp.settext("+62"); private boolean validasi() { List<String> errmessage = new ArrayList<String>(); if (txtusername.gettext().isempty()) errmessage.add("username belum terisi."); else if (txtusername.gettext().contains(" ")) errmessage.add("username tidak boleh ada spasi."); else if (txtusername.gettext().length() < 6) errmessage.add("username harus 6 karakter atau lebih."); else if (txtusername.gettext().length() > 15) errmessage.add("username tidak boleh melebihi 15 karakter."); if (txtpassword.gettext().isempty()) errmessage.add("password belum terisi."); else if (txtpassword.gettext().length() < 6) errmessage.add("password harus 6 karakter atau lebih."); else if (txtpassword.gettext().length() > 12) errmessage.add("password tidak boleh melebihi 12 karakter."); if (txtemail.gettext().isempty()) errmessage.add("email belum terisi."); else if (!txtemail.gettext().contains("@")) errmessage.add("email tidak valid."); else if (txtemail.gettext().length() > 35) errmessage.add("email tidak boleh melebihi 35 karakter."); if (txtnamalengkap.gettext().isempty()) errmessage.add("nama lengkap belum terisi."); else if (txtnamalengkap.gettext().length() < 6) errmessage.add("nama lengkap harus 6 karakter atau lebih"); else if (txtnamalengkap.gettext().length() > 50) errmessage.add("nama lengkap tidak boleh melebihi 50 karakter."); Date hariini = new Date(); Calendar calendar = Calendar.getInstance(); calendar.add(calendar.year, -7); Date TenYearBefore = calendar.gettime(); if (DTTanggalLahir.getText().isEmpty()) errmessage.add("tanggal lahir belum terisi."); else if (DTTanggalLahir.getDate().after(hariIni)) errmessage.add("tanggal lahir tidak boleh di masa depan."); else if (DTTanggalLahir.getDate().after(TenYearBefore)) errmessage.add("anda harus berusia 7 tahun atau lebih untuk mendaftar."); if (cmbasalkota.getselectedindex() == 0) errmessage.add("asal kota belum terpilih."); if (cmbjeniskelamin.getselectedindex() == 0) errmessage.add("jenis kelamin belum terpilih."); if (txtalamat.gettext().isempty()) errmessage.add("alamat masih belum terisi."); else if (txtalamat.gettext().length() < 10) errmessage.add("alamat harus 10 karakter atau lebih."); else if (txtalamat.gettext().length() > 100) errmessage.add("alamat tidak boleh melebihi 100 karakter atau L8
lebih."); if (txtkodepos.gettext().isempty()) errmessage.add("kode pos masih belum terisi."); else if (txtkodepos.gettext().length() < 5) errmessage.add("alamat harus 5 karakter atau lebih."); else if (txtkodepos.gettext().length() > 10) errmessage.add("alamat tidak boleh melebihi 10 karakter atau lebih."); if (txthp.gettext().isempty()) errmessage.add("nomor ponsel masih belum terisi."); else if (txthp.gettext().length() < 9) errmessage.add("nomor ponsel tidak lengkap (harus 8 karakter lebih)."); else if (txthp.gettext().length() > 15) errmessage.add("nomor ponsel tidak boleh melebihi 15 karakter lebih)."); if (errmessage.size() == 0) return true; else { String pesankesalahan = "Kesalahan berikut perlu Anda tindak lanjuti :"; int jumlahkesalahan = 1; for (String e: errmessage) { pesankesalahan = pesankesalahan + "\n" + String.valueOf(jumlahKesalahan) + ". " + e; jumlahkesalahan = jumlahkesalahan + 1; JOptionPane.showMessageDialog(panelRegist, pesankesalahan, "Form Belum Lengkap", JOptionPane.ERROR_MESSAGE); return false; public JPanel getpanelregist() { return panelregist; 6. Halaman Login import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.sql.sqlexception; public class FormLogin { private JPanel panellogin; private JTextField txtusername; private JButton btnlogin; private JButton btnregister; private JPasswordField txtpassword; private JFrame formberhasillogin; public JPanel getpanellogin() { return panellogin; public FormLogin(final JFrame formlogin){ btnregister.addactionlistener(new ActionListener() { L9
public void actionperformed(actionevent e) { HalamanUtama.setContentpane(new FormRegistration().getPanelRegist()); ); btnlogin.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { String username = txtusername.gettext(); String password = txtpassword.gettext(); try { HasilLogin hasil = BasisData.login(username, password); if (hasil.issucces){ JOptionPane.showMessageDialog(panelLogin, "Berhasil Login", "Confirmation", JOptionPane.INFORMATION_MESSAGE); formberhasillogin = new JFrame("Display Sistem"); formberhasillogin.setcontentpane(new FormBerhasilLogin(formBerhasilLogin, formlogin).getpanelberhasillogin()); formberhasillogin.setdefaultcloseoperation(windowconstants.exit_on_close); formberhasillogin.setsize(500,520); formberhasillogin.setresizable(false); Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); formberhasillogin.setlocation(dimension.width / 2 - formberhasillogin.getsize().width / 2, dimension.height / 2 - formberhasillogin.getsize().height / 2); formberhasillogin.setvisible(true); txtusername.settext(""); txtpassword.settext(""); formlogin.setvisible(false); else{ JOptionPane.showMessageDialog(panelLogin,"Username Dan Password Tidak Cocok", "Confirmation", JOptionPane.INFORMATION_MESSAGE); catch (SQLException e1) { JOptionPane.showMessageDialog(panelLogin, e1.getlocalizedmessage(), "SQL Exeption", JOptionPane.ERROR_MESSAGE); ); 7. Halaman About import javax.swing.*; public class FormAbout { private JPanel panelabout; public JPanel getpanelabout() { return panelabout; 8. Halaman BerhasiLogin import javax.swing.*; import java.awt.*; L10
import java.awt.event.actionevent; import java.awt.event.actionlistener; public class FormBerhasilLogin { public JPanel panelberhasillogin; private JButton btnlogout; public FormBerhasilLogin(final JFrame formberhasillogin, final JFrame formlogin){ btnlogout.addactionlistener(new ActionListener() { public void actionperformed(actionevent e) { formberhasillogin.setvisible(false); formlogin.setvisible(true); ); public JPanel getpanelberhasillogin(){ return panelberhasillogin; L11
CURICULUM VITAE Nama : Ari Sandy Maulana Place and date of birth :Tangerang, 29 Maret 1995 Sex : Laki - laki Nationality : Indonesia Marital Status : Mahasiswa ID Number : None Pasport Number : None Email : arisandymaulana@gmail.com Religion : Islam Address : Jl. Parung jaya RT 01/02 Kel. Parung Jaya Kec. Karang Tengah Tangerang Phone Number/Mobile : 087887860953 EDUCATION Elementary School : SDN Pondok Bahar 1 Secondary School : SMPN 24 Tangerang Senior High School : SMAN 13 Tangerang University : Mercu Buana Degree Award : Bachelor Degree Faculty : Ilmu Komputer Title Of Thesis : Studi Kriptanalisis Sistem Kriptografi Monoalphabetik: Studi Kasus Username Dan Password GPA : 3.79 SKILL Languages : B. Inggris Score TOEIC : 800 ORGANIZATION EXPERIENCE No Of Years Title Name Of Organization WORK EXPERIENCE No Of Years Position Employeer ACTIVIES NATIONAL/INTERNATIONAL No Of Years Position Employeer ACHIEVMENT No Of Years Title Honor HOBBIES Sports Various : Badminton, Football : None L12
L13
L14