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
Sumber lain :
https://en.wikipedia.org/wiki/IntelliJ_IDEA
https://id.wikipedia.org/wiki/Kata_sandi
https://id.wikipedia.org/wiki/Sandi_Caesar
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 +
}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.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; }
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);
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.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() { @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();
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("");
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)
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() { @Override
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.*;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;
} }