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
http://digilib.mercubuana.ac.id/
Sumber lain : https://en.wikipedia.org/wiki/IntelliJ_IDEA https://id.wikipedia.org/wiki/Kata_sandi https://id.wikipedia.org/wiki/Sandi_Caesar
101
http://digilib.mercubuana.ac.id/
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
L1
http://digilib.mercubuana.ac.id/
}else{ hasil = hasil + hasilDekripsiHuruf; } } } }else if(Character.isDigit(teksTerinput)){ for (int b=0; b
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
http://digilib.mercubuana.ac.id/
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, no_registrasi) + "'," + "'" + 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
http://digilib.mercubuana.ac.id/
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 import import import import
javax.swing.*; java.awt.*; java.awt.event.ActionEvent; java.awt.event.ActionListener; 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
http://digilib.mercubuana.ac.id/
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() { @Override public void actionPerformed(ActionEvent actionEvent) { frame.dispose(); } }); menuUtama.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { setContentpane(new HalamanUtama().getPanelUtama()); } }); menuRegistrasi.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { setContentpane(new FormRegistration().getPanelRegist()); } }); menuLogin.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { setContentpane(new FormLogin(frame).getPanelLogin()); } }); menuBantuan.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { setContentpane(new FormAbout().getPanelAbout()); } }); } public static void setContentpane(JPanel pane){ frame.setContentPane(pane); frame.revalidate();
L5
http://digilib.mercubuana.ac.id/
frame.repaint(); } }
5. Halaman Registrasi import com.alee.extended.date.WebDateField; import import import import import import import import import import import import
javax.swing.*; java.awt.event.ActionEvent; java.awt.event.ActionListener; java.awt.event.MouseAdapter; java.awt.event.MouseEvent; java.sql.SQLException; java.text.DateFormat; java.text.SimpleDateFormat; java.util.ArrayList; java.util.Calendar; java.util.Date; 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() { @Override 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() { @Override public void actionPerformed(ActionEvent e) { try { if (BasisData.validasiDatabase(txtUsername.getText())) { if (validasi()) { String username = txtUsername.getText(); String password = txtPassword.getText();
L6
http://digilib.mercubuana.ac.id/
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
http://digilib.mercubuana.ac.id/
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
http://digilib.mercubuana.ac.id/
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 import import import import
javax.swing.*; java.awt.*; java.awt.event.ActionEvent; java.awt.event.ActionListener; 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() { @Override
L9
http://digilib.mercubuana.ac.id/
public void actionPerformed(ActionEvent e) { HalamanUtama.setContentpane(new FormRegistration().getPanelRegist()); } }); btnLogin.addActionListener(new ActionListener() { @Override 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
http://digilib.mercubuana.ac.id/
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() { @Override public void actionPerformed(ActionEvent e) { formBerhasilLogin.setVisible(false); formLogin.setVisible(true); } }); } public JPanel getPanelBerhasilLogin(){ return panelBerhasilLogin; } }
L11
http://digilib.mercubuana.ac.id/
CURICULUM VITAE Nama Place and date of birth Sex Nationality Marital Status ID Number Pasport Number Email Religion Address Phone Number/Mobile EDUCATION Elementary School Secondary School Senior High School University Degree Award Faculty Title Of Thesis
: Ari Sandy Maulana :Tangerang, 29 Maret 1995 : Laki - laki : Indonesia : Mahasiswa : None : None : [email protected] : Islam : Jl. Parung jaya RT 01/02 Kel. Parung Jaya Kec. Karang Tengah Tangerang : 087887860953
GPA
: SDN Pondok Bahar 1 : SMPN 24 Tangerang : SMAN 13 Tangerang : Mercu Buana : Bachelor Degree : Ilmu Komputer : Studi Kriptanalisis Sistem Kriptografi Monoalphabetik: Studi Kasus Username Dan Password : 3.79
SKILL Languages
: B. Inggris
ORGANIZATION EXPERIENCE No Of Years
Score TOEIC : 800 Title
Name Of Organization
Position
Employeer
ACTIVIES NATIONAL/INTERNATIONAL No Of Years Position
Employeer
WORK EXPERIENCE No Of Years
ACHIEVMENT No Of Years HOBBIES Sports Various
Title
Honor
: Badminton, Football : None L12
http://digilib.mercubuana.ac.id/
L13
http://digilib.mercubuana.ac.id/
L14
http://digilib.mercubuana.ac.id/