DAFTAR PUSTAKA [BHA95]
Bhavani Thurasingham, William Ford, Security Constraint Processing in Multilevel Secure Distributed Database Management System, IEEE, April, 1995
[BIL05]
Bill Graziano, Writing CLR Stored Procedures in C#, http://www.sqlteam.com tanggal akses 23 November 2007 jam 10.15.
[EDD02]
Ed Dawson, H. Gustafson, Matt Henricksen and B. Millan, Evaluation of RC4 Stream Cipher, Information Security Research Centre, Quensland University of Technology. 2002.
[MIC04]
Michalis D.Galanis, Paris Kitsos, Giorrgos K., Odyseas K., Costa E. Goutis, Comparison of the Performance of Stream Ciphers for Wireless Communication, VLSI Design Laboratory, Electrical and Computer Engineering Departement University of Patras, Greece. 2004
[MSD05]
MSDN Library for Visual Studio 2005
[PRE97]
R.S.Pressman , Software Engineering (A Practional’s Approach), McGrawHill, 1997.
[SCH99]
B.Schenier and Dough Whiting, Fast Software Encryption : Designing Encryption Algorithm for Optimal Software Speed on the Intel Pentium Processor. 1999
[SQL05]
Microsoft SQL Server 2005 Books Online.
x
LAMPIRAN
LAMPIRAN A PERANCANGAN ANTARMUKA Lampiran A ini merupakan penjabaran dari perancangan antarmuka. Lampiran ini berisi perancangan seluruh antarmuka perangkat lunak dalam tugas akhir ini. Perangkat lunak ini memiliki beberapa halaman diantaranya halaman Index, halaman Login, halaman Eksplorasi basis data, halaman Ubah Password, halaman Register dan halaman Manajemen Kunci.
A.1
Perancangan Halaman Index Halaman Index terdiri atas beberapa objek yang dapat dilihat pada tabel A-1. Tabel A-1 Objek pada halaman Index
Id_Objek
Jenis
Nama
Keterangan Menampilkan username pengguna yang sudah login. Link untuk login atau logout
Index01
Text
LoginName
Index02
Link
Loginlogout
Index03
Link
Change Password
Link ke halaman ganti password
Index06
Link
DBExplorer
Link ke halaman eksplorasi basis data
Index04
Link
Change Encryption Key
Link ke halaman manajemen kunci enkripsi (hanya untuk Administrator)
Index05
Link
Register
Index06
Link
Help
Link ke halaman register user account (hanya untuk Administrator) Link ke halaman help.
Index07
Link
Home
Link ke halaman home
A‐1
Rancangan tampilan halaman Index dapat dilihat pada gambar A-1.
Gambar A-1 Rancangan halaman Index
A.2
Perancangan Halaman Login Halaman Login terdiri atas beberapa objek yang dapat dilihat pada tabel A-2. Tabel A-2 Objek pada halaman Login
Id_Objek Login01 Login02
Login03
Jenis
Nama
Input Form Input Form
Username
Link
Login
Password
Keterangan Textbox untuk menuliskan username pada saat login Textbox untuk menuliskan password pada saat login Link untuk melakukan login.
A‐2
Rancangan tampilan halaman Login dapat dilihat pada gambar A-2.
Gambar A-2 Rancangan Halaman Login
A.3
Perancangan Halaman Eksplorasi Basis Data Halaman Eksplorasi Basis Data terdiri atas beberapa objek yang dapat dilihat pada tabel A-3. Tabel A-3 Objek pada halaman Eksplorasi Basis Data
Id_Objek
Jenis
Nama
Eksplor01
Tree
Database tree
Eksplor02
Tabel
Eksplor03
Link
Database Table Add
Eksplor04
Link
Edit
Eksplor05
Link
Delete
Keterangan Tree yang memiliki node daftar basis data, kemudian memiliki anak daftar tabel dan memiliki anak daftar kolom. Tree ini dapat di-expand dan select. Tabel yang berisi hasil retrieve basis data dari dari tabel terpilih. Link untuk melakukan penambahan baris pada suatu tabel Link untuk melakukan pengeditan baris terpilih. Link untuk melakukan penghapusan baris terpilih.
A‐3
Rancangan tampilan halaman Eksplorasi Basis Data dapat dilihat pada gambar A-3.
Gambar A-3 Rancangan halaman eksplorasi basis data
A.4
Perancangan Halaman Ubah Password Halaman Ubah Password terdiri atas beberapa objek yang dapat dilihat pada tabel A-4. Tabel A-4 Objek pada halaman ubah password
Id_Objek
Jenis
Nama
Keterangan
Password01 Input Form Password02 Input Form
Current Password New Password
Textbox untuk menuliskan passsword saat ini. Textbox untuk menuliskan password baru.
Password03 Input Form Password04 Link
Confirm Password Change
Password05 Link
Cancel
Textbox untuk menuliskan konfirmasi password Link untuk melakukan pengubahan password. Link untuk batal ubah password dan kembali ke halaman sebelumnya.
A‐4
Rancangan tampilan halaman Ubah Password dapat dilihat pada gambar A-4.
Gambar A-4 Rancangan halaman ubah password
A.5
Perancangan Halaman Register Halaman Register terdiri atas beberapa objek yang dapat dilihat pada tabel A-5. Tabel A-5 Objek pada halaman Register
Id_Objek
Jenis
Nama
Keterangan
Register01 Tabel
Username Table
Tabel yang berisi daftar username yang terdapat pada perangkat lunak
Register02 Link
Add User
Register03 Input Form Register04 Input Form
Username
Link untuk memunculkan form tambah akun baru. Textbox untuk menuliskan username akun baru. Textbox untuk menuliskan password untuk akun baru.
Register05 Input Form
Confirm Password
Textbox untuk menuliskan konfirmasi password
Register06 Input Form
Security Question
Textbox untuk menuliskan pertanyaan keamanan
Password
A‐5
Id_Objek
Jenis
Nama
Keterangan
Register07 Input Form
Security Answer
Textbox untuk menuliskan jawaban dari pertanyaan keamanan
Register08 Link
Create
Register09 Link
Cancel
Link untuk melakukan pembuatan user account baru Link untuk membatalkan pembuatan user account
Rancangan tampilan halaman Register dapat dilihat pada gambar A-5.
Gambar A-5 Rancangan halaman register
A.6
Perancangan Halaman Manajemen Kunci Halaman Manajemen Kunci terdiri atas beberapa objek yang dapat dilihat pada tabel A-6. Tabel A-6 Objek pada halaman Manajemen Kunci
Id_Objek MK01 MK02 MK03
Jenis Input Form Link Input Form
Nama
Keterangan
Textbox untuk menuliskan kunci pada waktu inisialisasi kunci. Link untuk melakukan pengesetan awal Set Key kunci. Current Key Textbox untuk menuliskan kunci saat ini. Key
A‐6
Id_Objek
Jenis
Nama
Keterangan
MK04
Input Form
New Key
Textbox untuk menuliskan kunci baru.
MK05 MK06
Input Form Link
Confirm Key Change
Textbox untuk menuliskan konfirmasi kunci. Link untuk melakukan pengubahan kunci.
MK07
Link
Cancel
Link untuk batal ubah kunci dan kembali ke halaman sebelumnya.
Rancangan tampilan halaman Manajemen Kunci dapat dilihat pada gambar A-6.
Gambar A-6 Rancangan halaman Manajemen Kunci
A‐7
LAMPIRAN B IMPLEMENTASI MODUL PERANGKAT LUNAK Lampiran B ini merupakan penjelasan rinci dari beberapa prosedur utama yang digunakan perangkat lunak.
B.1
Implementasi Kelas Antarmuka Berikut rincian beberapa kelas antarmuka : 1. Antarmuka Index Berikut implementasi kelas antarmuka Index public partial class Home : System.Web.UI.Page { /*Prosedur sewaktu loading halaman Index*/ protected void Page_Load(object sender, EventArgs e) }
2. Antarmuka Login Kelas antarmuka Login menangani aksi otentikasi ketika link daftar masuk pada antarmuka di-klik, berikut implementasi kelas antarmuka Login. public partial class login : System.Web.UI.Page { /*Prosedur sewaktu loading halaman login*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur otentikasi sewaktu pengguna meng-klik daftar masuk*/ protected void OnAuthenticate(object sender, AuthenticateEventArgs e) }
3. Antarmuka Eksplorasi Basis Data Kelas antarmuka ini menangani banyak aksi, seperti menampilkan daftar basis data, daftar tabel dan menampilkan isi tabel terpilih. Antarmuka ini juga menangani proses B‐1
insert, edit dan delete pada suatu tabel. Berikut implementasi kelas antarmuka Eksplorasi Basis Data. public partial class SecureData_dbexplorer : System.Web.UI.Page { /*String koneksi ke basis data*/ private String connectionString /*Instan dari kelas Query*/ private Query KoneksiQuery; /*Prosedur sewaktu loading halaman eksplorasi basis data*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur sewaktu inisialisasi halaman eksplorasi basis data*/ protected void Page_Init(object sender, EventArgs e) /*Prosedur untuk menampilkan treeview yang berisi node level pertama daftar basis data yang dapat diakses*/ private void DatabaseList() /*prosedur membuat node level kedua pada treeview(nama tabel)*/ private void PopulateTable(TreeNode node) /*prosedur membuat node level ketiga pada treeview (kolom tabel)*/ private void PopulateHeader(TreeNode node) /*Menampilkan hasil retrieve tabel ke layar*/ protected void ViewData(object sender, EventArgs e) /*Menambah baris terpilih*/ protected void RowAdd(object sender, EventArgs e) /*Mengedit baris*/ protected void RowEdit(object sender, GridViewEditEventArgs e) /*Menghapus baris*/ protected void RowDelete(object sender, GridViewDeleteEventArgs e) }
Beberapa operasi pada kelas Eksplorasi Basis Data mengangai beberapa proses kompleks. Berikut penjelasan beberapa operasi tersebut. public partial class SecureData_dbexplorer : System.Web.UI.Page { ... /*Prosedur untuk menampilkan treeview yang berisi node level pertama daftar basis data yang dapat diakses*/ private void DatabaseList() { /*Meretreive basis data dengan memanggil fungsi pada kelas query*/ DataSet ResultSet = KoneksiQuery.RetrieveDatabases(); /*DataSet yang merupakan nilai kembalian merupakan input bagi treeview*/ } /*prosedur membuat node level kedua pada treeview(nama tabel)*/ private void PopulateTable(TreeNode node) { /*Meretreive tabel dengan memanggil fungsi pada kelas query*/ DataSet ResultSet = KoneksiQuery.RetrieveTables();
B‐2
/*DataSet yang merupakan nilai kembalian merupakan input bagi treeview*/ } /*prosedur membuat node level ketiga pada treeview (kolom tabel)*/ private void PopulateHeader(TreeNode node) { /*Meretreive kolom dengan memanggil fungsi pada kelas query*/ DataSet ResultSet = KoneksiQuery.RetrieveColumns(); /*DataSet yang merupakan nilai kembalian merupakan input bagi treeview*/ } /*Menampilkan hasil retrieve tabel ke layar */ protected void ViewData(object sender, EventArgs e) { } /*Menambah baris terpilih*/ protected void RowAdd(object sender, EventArgs e) { /*Mengirimkan nama kolom ke halaman Add Record*/ Response.Redirect("~/SecureData/Add.aspx"); } /*Mengedit baris*/ protected void RowEdit(object sender, GridViewEditEventArgs e) { /*Mengirimkan nama kolom dan nilai baris terpilih beserta atribut primary key ke halaman Edit Record*/ Response.Redirect("~/SecureData/edit.aspx"); } /*Menghapus baris*/ protected void RowDelete(object sender, GridViewDeleteEventArgs e) { /*Menghapus baris terpilih dengan constraint primary key, sehingga hanya dapat menghapus baris yang memiliki primary key*/ } }
4. Antarmuka Tambah Baris Kelas ini menangani aksi yang dilakukan ketika link tambah baris di-klik, yaitu menambah semua masukkan ke dalam tabel terpilih. Berikut implementasi kelas antarmuka Tambah Baris. public partial class SecureData_Add : System.Web.UI.Page {/*Prosedur sewaktu inisialisasi halaman tambah baris*/ void Page_Init(Object sender, EventArgs e) /*Prosedur sewaktu loading halaman tambah baris*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur sewaktu pengguna meng-klik tambah baris*/ protected void AddRecord(object sender, EventArgs e) }
B‐3
Berikut penjelasan beberapa operasi pada kelas Tambah Baris. public partial class SecureData_Add : System.Web.UI.Page { ... void Page_Init(Object sender, EventArgs e) { /*Menginisialisasi komponen yang akan ditampilkan pada halaman seperti label dan textbox, nama label merupakan nama kolom kiriman dari kelas antarmuka eksplorasi basis data*/ } protected void AddRecord(object sender, EventArgs e) { /*Mengkonversi string yang ada pada textbox untuk diterjemahkan menjadi query language*/ String query = "insert [" + Session["CurrentTable"].ToString() + "](" + column + ") values(" + data + ")"; /*Mengenkripsi query dengan memanggil kelas query dan mengeksekusi query tersebut*/ KoneksiQuery.QueryString = query; KoneksiQuery.RC4Seed = new Random().Next(1000); if (KoneksiQuery.ExecSQLNonQuery()) {/*query berhasil*/ Response.Redirect("~/SecureData/dbexplorer.aspx"); } else {/*query gagal*/ } } }
5. Antarmuka Ubah Baris Kelas ini menangani aksi yang dilakukan ketika link ubah baris di-klik, yaitu mengedit tabel sesuai dengan semua masukkan ke dalam tabel terpilih. Berikut implementasi kelas antarmuka Ubah Baris. public partial class SecureData_Edit : System.Web.UI.Page { /*Prosedur sewaktu loading halaman ubah baris*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur sewaktu inisialisasi halaman ubah baris*/ void Page_Init(Object sender, EventArgs e) /*Prosedur sewaktu pengguna meng-klik edit baris*/ protected void EditRecord(object sender, EventArgs e) }
B‐4
Berikut penjelasan beberapa operasi pada kelas Ubah Baris. public partial class SecureData_Edit : System.Web.UI.Page { ... void Page_Init(Object sender, EventArgs e) { /*Menginisialisasi komponen yang akan ditampilkan pada halaman seperti label dan textbox beserta isi textbox yang merupakan nilai baris hasil kiriman dari kelas antarmuka eksplorasi basis data*/ } protected void EditRecord(object sender, EventArgs e) { /*Mengkonversi string yang ada pada textbox untuk diterjemahkan menjadi query language dengan unik id adalah Primary key, sehingga hanya tabel yang memiliki primary key yang dapat melakukan operasi ini*/ String query = "update [" + Session["CurrentTable"].ToString() + "] set " + data + " where [" + Session["PK"].ToString() + "]='" + PKValue + "'"; /*Mengenkripsi query dengan memanggil kelas query dan mengeksekusi query tersebut*/ KoneksiQuery.QueryString = query; KoneksiQuery.RC4Seed = new Random().Next(1000); if (KoneksiQuery.ExecSQLNonQuery()) {{/*query berhasil*/ Response.Redirect("~/SecureData/dbexplorer.aspx"); } else {/*query gagal*/ } } }
6. Antarmuka Ubah Password Kelas ini menangani aksi ketika link ubah sandi di-klik yaitu dengan melakukan berbagai validasi terhadap masukkan dan memanggil kelas untuk mengubah password. Berikut implementasi kelas antarmuka Ubah Password. public partial class SecureData_ChangePassword : System.Web.UI.Page { /*Prosedur sewaktu loading halaman ubah password*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur sewaktu pengguna meng-klik ubah sandi*/ protected void ChangePassword(object sender, EventArgs e) /*Prosedur untuk memvalidasi pasword lama */ protected void PasswordValidate(object source, ServerValidateEventArgs args) }
B‐5
Berikut penjelasan beberapa operasi pada kelas Ubah Password. public partial class SecureData_ChangePassword : System.Web.UI.Page { ... protected void ChangePassword(object sender, EventArgs e) { /*Melakukan validasi terhadap masukan dan memanggil method ChPwd pada kelas loginUser*/ if (Page.IsValid) { if (loginPengguna.ChPwd(pos, NewPassword.Text)) {/*ganti password berhasil*/} else{/*ganti password gagal*/} } } ... }
7. Antarmuka Register Kelas ini menangani seluruh aksi pada halaman manajemen akun. Berikut implementasi kelas antarmuka register. public partial class SecureData_AdminPage_Register : System.Web.UI.Page { /*Prosedur sewaktu loading halaman register*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur sewaktu Admin meng-klik Tambah Pengguna*/ protected void AddUser_Click(object sender, EventArgs e) /*Prosedur ketuka Admin meng-klik delete pada daftar pengguna*/ protected void UserDelete(object sender, GridViewDeleteEventArgs e) /*Prosedur sewaktu Admin meng-klik Buat Akun*/ protected void CreateUser(object sender, LoginCancelEventArgs e) /*Prosedur ketika Admin meng-klik batal*/ protected void cancelCreateUser(object sender, EventArgs e) }
Berikut penjelasan beberapa operasi pada kelas Register. public partial class SecureData_AdminPage_Register : System.Web.UI.Page {... protected void Page_Load(object sender, EventArgs e) {/*Menampilkan daftar username*/} protected void CreateUser(object sender, LoginCancelEventArgs e) {
B‐6
/*Membuat user dengan memanggil method CekUsername pada kelas logi user untuk mengecek keberadaan username yang dibuat exist atau belum*/ loginUser loginPengguna = new loginUser(); if (!loginPengguna.CekUsername(CreateUserWizard1.UserName)) { /*Jika tidak exist lakukan registrasi dengan memanggil method reg pada kelas login user*/ if (loginPengguna.Reg()) {/*registrasi berhasil*/} else {/*registrasi gagal*/} } } protected void UserDelete(object sender, GridViewDeleteEventArgs e) {/*Memanggil method pada kelas login user*/ loginUser loginPengguna = new loginUser(); if (loginPengguna.DeleteUser(e.RowIndex)) {/*Penghapusan berhasil*/} else {/*Penghapusan gagal*/} } } }
8. Antarmuka Manajemen Kunci Kelas ini menangani aksi ketika link set kunci atau ubah kunci di-klik. Berikut implementasi kelas antarmuka Manajemen Kunci. public partial class SecureData_AdminPage_KeyManagement : System.Web.UI.Page { /*Prosedur sewaktu loading halaman Manajemen Kunci*/ protected void Page_Load(object sender, EventArgs e) /*Prosedur sewaktu Admin meng-klik set kunci*/ protected void CreateKey(object sender, EventArgs e)) /*Prosedur sewaktu Admin meng-klik ubah kunci */ protected void ChangeKey(object sender, EventArgs e) /*Prosedur untuk memvalidasi kunci lama*/ protected void KeyValidate(object source, ServerValidateEventArgs args) }
B‐7
Berikut penjelasan beberapa operasi pada kelas Manajemen Kunci. public partial class SecureData_AdminPage_KeyManagement : System.Web.UI.Page { ... protected void Page_Load(object sender, EventArgs e) { /*Mengecek kunci exist atau belum, jika sudah tampilkan form edit kunci, jika belum tampilkan form insert kunci*/ } protected void LinkButton1_Click(object sender, EventArgs e) { if (new KeyManager().SyncKey(TextBox1.Text, false, connectionString)) { Label1.Visible = true; Label1.ForeColor = System.Drawing.Color.Black; Label1.Text = "Pembuatan Kunci Sukses"; } else { Label1.Visible = true; Label1.Text = "Pembuatan Kunci Gagal"; } Panel2.Visible = false; } protected void OKButton_Click(object sender, EventArgs e) {/*Memvalidasi masukkan kunci*/ if (Page.IsValid) { /*Memanggil method SyncKey pada kelas Key Manager untuk melaukan sinkronisasi kunci antara file system dan basis data*/ KeyManager km = new KeyManager(); if (km.SyncKey(NewPassword.Text, true, connectionString)) {/*Penggantian kunci berhasil*/} else {/*Penggantian kunci gagal*/} } } protected void KeyValidate(object source, ServerValidateEventArgs args) {/*Memvalidasi kunci masukkan apakah cocok dengan kunci lama*/ } }
B.2
Implementasi Kelas
Bagian ini menjelaskan penjelasan rinci beberapa operasi dalam suatu kelas yang diimplementasikan dalam perangkat lunak dalam tugas akhir.
B‐8
B.2.1 Kelas Akun Pengguna Berikut implementasi kelas Akun Pengguna. public class AkunPengguna { #region Private Fields /*Atribut menyimpan nama pengguna*/ private String username; /*Atribut menyimpan sandi pengguna*/ private String password; /*Atribut menyimpan daftar nama pengguna*/ private List<String> usernameList /*Atribut menyimpan nama alamat file data aplikasi*/ private String AppDirPath #endregion #region Get & Set /*Prosedur untuk mendapatkan dan mengeset atribut username*/ public string Username /*Prosedur untuk mendapatkan dan mengeset atribut password*/ public string Password /*Prosedur untuk mendapatkan dan mengeset atribut usernamelist*/ public List<String> UsernameList #endregion #region Constructor /*Konstruktor kelas akun pengguna*/ public AkunPengguna() #endregion #region Public Method /*Fungsi untuk melakukan otentikasi username dan password*/ public bool ProcessAuthenticate() /*Fungsi mencari username dan password pada daftar username password*/ public bool Find(ref long position) /*Fungsi mengganti password pengguna*/ public bool ChPwd(long pos, String NewPassword) /*Fungsi melakukan registrasi user account*/ public bool Reg() /*Fungsi menghapus user sesuai dengan urutan pada parameter*/ public bool DeleteUser(int userke) /*Fungsi mengecek username pada parameter pada daftar username*/ public bool CekUsername(String NewUsername) #endregion }
Implementasi otentikasi user, yaitu proses mengotentikasi pengguna yang login, sebagai berikut : public bool ProcessAuthenticate() {/*
B‐9
I.S : username dan password merupakan masukan dari pengguna F.S : mengembalikan true jika otentikasi berhasil dan false jika gagal*/ /*eq adalah nilai kembalian hasil otentikasi, asumsi awal otentikasi berhasil*/ bool eq = true; String AppDir = AppDirPath + "data.txt"; /*Menghitung nilai hash dari username dan password*/ HashMD5 MD5 = new HashMD5(); MD5.Input = username; byte[] uname = MD5.ComputeHashMD5(); MD5.Input = password; byte[] pwd = MD5.ComputeHashMD5(); try { /* Membandingkan hasil penghitungan nilai hash username dan password dengan nilai yang tersimpan pada file user account data.txt, jika sama maka otentikasi berhasil dan sebaliknya If(hasil hash cocok dengan data pada data.txt) Then eq = true Else Then eq = false */ } catch {/*Jika proses gagal maka mengembalikan false*/ eq = false; } return eq; }
Implementasi Pengubahan password sebagai berikut : public bool ChPwd(long pos, String NewPassword) {/* I.S : pos merupakan posisi password lama pada encpwd.txt dan NewPassword merupakan password baru. F.S : mengembalikan true jika penggantian berhasil dan false jika gagal*/ bool succes = true; String AppDir = AppDirPath + "data.txt"; /*Menghitung nilai hash dari NewPassword*/ HashMD5 MD5 = new HashMD5(); MD5.Input = NewPassword; byte[] pwd = MD5.ComputeHashMD5(); try {/*Mengganti nilai hash password lama dengan password baru*/ } catch {/*Jika proses gagal maka mengembalikan false*/ succes = false; } return succes; }
B‐10
Implementasi Register akun pengguna baru sebagai berikut : public bool Reg() {/* I.S :username dan password user account baru yang merupakan masukkan pengguna. F.S : mengembalikan true jika registrasi berhasil dan false jika gagal*/ bool succes = true; String AppDir = AppDirPath + "data.txt"; String AppDirUser = AppDirPath + "userlist.txt"; try { /* Memasukkan nilai hash username dan password ke dalam file data.txt dan username ke userlist.txt */ catch {/*Jika proses gagal maka mengembalikan false*/ succes = false; } return succes; }
Implementasi DeleteUser sebagai berikut : public bool DeleteUser(int userke) {/* I.S : posisi urutan user account pada daftar user. F.S : mengembalikan true jika penghapusan berhasil dan false jika gagal*/ bool succes = true; String AppDir = AppDirPath + "data.txt"; String AppDirUser = AppDirPath + "userlist.txt"; try { /* Menghapus username dan password pada userlist.txt dan nilai hash username dan password pada data.txt */ catch {/*Jika proses gagal maka mengembalikan false*/ succes = false; } return succes; }
B‐11
B.2.2 Kelas Query Kelas query memungkinkan dapat melakukan eksekusi untuk setiap macam query dengan tipe data selain image, hal itu dikarenakan untuk tipe data image tidak dapat dieksekusi dalam bentuk string query. Berikut implementasi kelas Query. public class Query { #region private Fields /*Atribut menyimpan string koneksi*/ private String connectionString; /*Atribut menyimpan nama basis data yang sedang aktif*/ private String currentdatabase; /*Atribut menyimpan nama tabel yang sedang aktif*/ private String currenttable; /*Atribut menyimpan query yang akan di eksekusi*/ private String query; /*Atribut menyimpan nilai awal pembangkit random*/ private int seed; #endregion #region Constructor /*Konstruktor kelas query*/ public Query() #endregion #region Get & Set /*Prosedur untuk mendapatkan dan mengeset public int RC4Seed /*Prosedur untuk mendapatkan dan mengeset public string CurrentDatabase /*Prosedur untuk mendapatkan dan mengeset public string CurrentTable /*Prosedur untuk mendapatkan dan mengeset public string ConnectionString /*Prosedur untuk mendapatkan dan mengeset public string QueryString #endregion
atribut seed*/ atribut currentdatabase*/ atribut currenttable*/ atribut connectionstring*/ atribut query*/
#region Public Method /*Fungsi untuk membenarkan query agar dapat dieksekusi*/ public string SafeSqlLikeClauseLiteral(string inputSQL) /*Fungsi untuk mengubah string query ke bentuk array of byte*/ private byte[] StringQueryToBytes() /*Fungsi untuk mengeksekusi query yang tidak memgembalikan nilai*/ public bool ExecSQLNonQuery() /*Fungsi untuk mengeksekusi query untuk meretreive nilai tertentu*/ public bool ExecSQLQuery(ref DataSet dataSet) /*Fungsi untuk mendekripsi hasil query*/
B‐12
public DataView DekripQueryResult(DataSet dataSet) /*Fungsi untuk mendapatkan nilai primary key dari suatu tabel*/ public String GetPK() /*Fungsi untuk mendapatkan nilai foreign key dari suatu tabel*/ public String GetFK() /*Fungsi untuk mendapatkan nilai key sesuai dengan masukan stored procedure, dapat berupa foreign key maupun primary key*/ private String GetKey(String sp_keys) /*mengembalikan dataset yang berisi daftar basis data*/ public DataSet RetrieveDatabases() /*mengembalikan dataset yang berisi daftar tabel*/ public DataSet RetrieveTables() /*mengembalikan dataset yang berisi daftar kolom pada tabel*/ public DataSet RetrieveColumns() /*mengembalikan basis data, tabel, kolom dengan stored procedure tertentu*/ private DataSet RetrieveWithSP(String QueryString,bool db) /*Fungsi untuk mendapatkan tipe data tiap kolom dari suatu tabel*/ public DataTable GetDataType() /*Fungsi untuk mengubah kunci pada basis data*/ public bool ChangeKeyOnDatabase(byte[] qb,bool status) #endregion }
Implementasi ExecSQLNonQuery sebagai berikut : public bool ExecSQLNonQuery() {/* I.S : tabel terpilih, basis data terpilih dan query masukkan dari pengguna F.S : mengembalikan true jika eksekusi berhasil dan false jika gagal */ bool succes = true; /*Membuka koneksi basis data*/ using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); connection.ChangeDatabase(currentdatabase); try {/*Memanggil stored procedure SPNonQuery dengan parameter query dan nilai seed untuk generate kunci enkripsi. */ } catch {/*Jika proses gagal maka mengembalikan false*/ succes = false; // Close the database connection if it is still open. if (connection.State == ConnectionState.Open) { connection.Close(); } } } return succes; }
B‐13
Implementasi ExecSQLQuery sama dengan ExecSQLNonQuery hanya saja memanggil stored procedure SPQuery dan mengembalikan output parameter berupa kontainer yang berisi hasil retrieve query. public bool ExecSQLQuery(ref DataSet dataSet)
Impementasi DekripQueryResult, yaitu mendekripsi hasil retrieve basis data, sebagai berikut : public DataView DekripQueryResult(DataSet dataSet) {/* I.S : Kontainer berupa DataSet hasil retrieve basis data F.S : Konteiner hasil dekripsi yang siap ditampilkan*/ RC4 Dekripsi = new RC4(new KeyManager().Key,seed); /*Mendekripsi tiap data yang ada pada kontainer hasil retrieve basis data dan memasukkannya ke kontainer baru*/ }
Implementasi ChangeKeyOnDatabase, yaitu method berfungsi untuk mengganti kunci enkripsi pada basis data, sebagai berikut : public bool ChangeKeyOnDatabase(byte[] qb,bool status) {/* I.S : Kunci baru dan status untuk mengubah atau menginisialisasi kunci F.S : Kunci terganti pada semua basis data.*/ bool succes = true; /*Meretrieve semua dtabase yang ada dan menempatkannya pada atribut listdb*/ DataSet listdb = RetrieveDatabases(); /*Membuka koneksi basis data*/ using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); if (listdb.Tables.Count > 0) {/*Melakukan operasi pada tiap basis data*/ foreach (DataRow row in listdb.Tables[0].Rows) { try {/*Memanggil stored procedure ChPwd dengan parameter kunci baru dan status*/ } catch (Exception ex) {/*Jika proses gagal maka mengembalikan false*/ succes = false; } } } } return succes; }
B‐14
Kelas Query menggunakan beberapa stored procedure sistem dalam menjalankan beberapa method-nya. Berikut beberapa fungsi beserta stored procedure yang digunakan dalam kelas Query : 1. RetreiveDatabases() Fungsi ini mengembalikan seluruh nama basis data yang ada pada suatu server dengan menggunakan stored procedure sistem sp_databases. 2. RetrieveTables() Fungsi ini mengembalikan seluruh nama tabel yang ada pada suatu basis data dengan menggunakan stored procedure sistem sp_tables. 3. RetrieveColumns() Fungsi ini mengembalikan seluruh nama kolom yang ada pada suatu tabel dengan menggunakan stored procedure sistem sp_columns, yang berparameter nama tabel yang ingin dikembalikan nilai kolomnya. 4. GetPK() Fungsi ini mengembalikan nilai primary key dari suatu tabel dengan menggunakan stored procedure sistem sp_pkeys. 5. GetFK() Fungsi ini mengembalikan nilai foreign key dari suatu tabel dengan menggunakan stored procedure sistem sp_fkeys.
B.2.3 Kelas Enkripsi RC4 Berikut implementasi kelas Enkripsi RC4 public class RC4 { #region Private Fields /*Atribut berupa S-Box terdiri dari 256 kolom integer*/ private int[] S /*Atribut berupa array kunci pengguna*/ private int[] K /*Atribut menyimpan kunci enkripsi dekripsi*/ private String key /*Atribut menyimpan plainteks yang akan dienkripsi*/ private String plainteks /*Atribut menyimpan cipherteks yang akan didekripsi*/
B‐15
private String cipherteks /*Atribut menyimpan nilai awal pembangkit random*/ private int seed; #endregion #region Get & Set /*Prosedur untuk mendapatkan public string Plainteks /*Prosedur untuk mendapatkan public string Cipherteks /*Prosedur untuk mendapatkan public int Seed /*Prosedur untuk mendapatkan public string Key #endregion
dan mengeset atribut plainteks*/ dan mengeset atribut cipherteks*/ dan mengeset atribut seed*/ dan mengeset atribut key*/
#region Costructor /*Konstruktor kelas RC4*/ public RC4() #endregion #region Public Method /*Fungsi untuk mengenkripsi plainteks menjadi cipherteks*/ public bool Encrypt() /*Fungsi untuk mendekripsi cipherteks menjadi plainteks*/ public bool Decrypt() #endregion }
Implementasi method enkripsi adalah sebagai berikut : public bool Encrypt() {/* I.S : plainteks berupa string yang akan dienkripsi F.S : boolean berupa status keberhasilan enkripsi dan cipherteks hasil enkripsi*/ bool status = true; try { /*Mengenkripsi cipherteks menjadi plainteks*/ } catch { /*Mengembalikan false jika terjadi kegagalan proses enkripsi*/ status = false; } return status; }
B‐16
Implementasi method dekripsi adalah sebagai berikut : public bool Decrypt() {/* I.S : cipherteks berupa string yang akan didekripsi F.S : boolean berupa status keberhasilan dekripsi dan plainteks hasil dekripsi*/ bool status = true; try { /*Mendekripsi plainteks menjadi cipherteks*/} catch {/*Mengembalikan false jika terjadi kegagalan proses enkripsi*/ status = false; } return status; }
B.2.4 Kelas Manajemen Kunci Berikut implementasi kelas Manajemen Kunci. public class KeyManager { #region private Fields /*Atribut menyimpan nama alamat file data aplikasi*/ private String AppDir /*Atribut menyimpan kunci enkripsi dekripsi*/ private String key #endregion #region Constructor /*Kontruktor kelas KeyManager*/ public KeyManager() #endregion #region Get & Set /*Prosedur untuk mendapatkan dan mengeset atribut key*/ public String Key #endregion #region Public Method /*Fungsi untuk mengecek kesamaan kunci pada parameter dan yang ada pada data*/ public bool EqKey(string password) /*Fungsi untuk mengecek apakah file penyimpan kunci exist*/ public bool IsExistKeyFile() /*Fungsi untuk melakukan inisialisasi perubahan dan sinkronisasi kunci yang terdapat pada file system dan basis data*/ public bool SyncKey(String NewPassword, bool status, String connectionString) #endregion }
B‐17
Implementasi EqKey, yaitu method untuk mengecek kunci masukkan sama atau tidak dengan kunci yang ada, sebagai berikut : public bool EqKey(string password) {/* I.S : Kunci masukkan dari pengguna F.S : Mengembalikan true jika kunci masukkan pengguna cocok dengan kunci yang ada dan sebaliknya jika tidak cocok*/ bool eq = true; /*Menghitung nilai hash kunci masukkan pengguna*/ HashMD5 MD5 = new HashMD5(); MD5.Input = password; byte[] pwd = MD5.ComputeHashMD5(); /*Mencocokkan kunci yang ada dengan kunci masukkan*/ return eq; }
Implementasi SyncKey, sebagai berikut : public bool SyncKey(String NewPassword, bool status, String connectionString) {/* I.S : Kunci baru, status inisialisasi atau update, dan string koneksi F.S : Mengembalikan true jika sinkronisasi kunci berhasil dan sebaliknya jika gagal.*/ bool succes = false; /*Menghitung nilai hash kunci baru*/ HashMD5 MD5 = new HashMD5(); MD5.Input = NewPassword; byte[] pwd = MD5.ComputeHashMD5(); /* Memanggil method changeKeyOnDatabase pada kelas Query Jika ChangeKeyOnDatabase mengembalikan true maka sinkronisasi berhasil dan sebaliknya */ return succes; }
B.2.5 Kelas Hash MD5 Berikut implementasi kelas Hash MD5. public class HashMD5 { #region Private Fields /*Atribut menyimpan string yang akan dihitung nilai hashnya*/ private String input; #endregion
B‐18
#region Constructor /*Konstruktor kelas HashMD5*/ public HashMD5() #endregion #region GetSetParams /*Prosedur untuk mendapatkan dan mengeset atribut input*/ public string Input #endregion #region Public Method /*Fungsi untuk menghitung nilai hash dari atribut input*/ public byte[] ComputeHashMD5() #endregion }
Implementasi operasi ComputeHashMD5 sebagai berikut : public byte[] ComputeHashMD5() {/* I.S : variable lokal Input yang berisi nilai yang akan dihitung hashnya F.S : array byte hasil penghitungan nilai hash*/ /*Menghitung nilai hash dari Input*/ return result; }
B.3
Implementasi Stored Procedure Stored procedure pada basis data diimplementasikan dengan menggunakan fasilitas yang
disediakan kakas pemrograman Microsoft Visual Studio yaitu dengan membuat Common Language Runtime (CLR) Stored Procedure. Fasilitas ini memungkinkan untuk membuat stored procedure dengan bahasa pemrograman common seperti dengan VB, C++, C#. Pada tugas akhir ini implementasi stored procedure menggunakan bahasa pemrograman C#. Berikut implementasi stored procedure. 1. Stored Procedure SP_NonQuery Stored procedure ini dipanggil saat mengeksekusi query yang tidak memberikan nilai kembalian. Berikut implementasi SP_NonQuery. public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure]
B‐19
/*Stored procedure SPNonQuery dengan 2 parameter yaitu query terdekripsi berupa array of byte dan nilai seed untuk pembangkitan bilangan random*/ public static void SPNonQuery(SqlBytes decquery, SqlInt32 seed) { /*Membuat instan kelas RC4*/ RC4 RC4Engine = new RC4(new Kunci().Key, (int)seed); char[] qc = new char[decquery.Length]; for (int i = 0; i < qc.Length; i++) { qc[i] = (char)decquery[i]; } /*Mengeset nilai cipherteks dengan query*/ RC4Engine.Cipherteks = new String(qc); /*Dekripsi query dengan algoritma RC4*/ RC4Engine.Decrypt(); /*Mengeset query dengan plainteks yaitu query terdekrispi*/ string query = RC4Engine.Plainteks; using (SqlConnection conn = new SqlConnection("context connection=true")) { SqlCommand Command = new SqlCommand(query, conn); conn.Open(); /*Eksekusi query pada basis data*/ Command.ExecuteNonQuery(); conn.Close(); } } }
2. Stored Procedure SP_Query Stored procedure ini dipanggil saat mengeksekusi query yang memberikan nilai kembalian. Berikut implementasi SP_Query public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] /*Stored procedure SPQuery dengan 2 parameter yaitu query terdekripsi berupa array of byte dan nilai seed untuk pembangkitan bilangan random*/ public static void SPQuery(SqlBytes decquery, SqlInt32 seed) { /*Membuat instan kelas RC4*/ RC4 RC4Engine = new RC4(new Kunci().Key, (int)seed); char[] qc = new char[decquery.Length]; for (int i = 0; i < qc.Length; i++) { qc[i] = (char)decquery[i]; } /*Mengeset nilai cipherteks dengan query*/ RC4Engine.Cipherteks = new String(qc); /*Dekripsi query dengan algoritma RC4*/ RC4Engine.Decrypt();
B‐20
/*Mengeset query dengan plainteks yaitu query terdekrispi*/ string query = RC4Engine.Plainteks; using (SqlConnection connection = new SqlConnection("context connection=true")) { connection.Open(); SqlCommand command = new SqlCommand(query, connection); command.CommandType = CommandType.Text; /*Eksekusi query pada basis data*/ SqlDataReader rdr = command.ExecuteReader(); SqlMetaData[] smd = new SqlMetaData[rdr.FieldCount]; /*Membuat kontainer penampung nilai kembalian*/ for (int i = 0; i < rdr.FieldCount; i++) { smd[i] = new SqlMetaData(rdr.GetName(i), SqlDbType.NVarChar, 128); } /*Looping untuk tiap nilai yang di-retrieve sampai habis*/ while (rdr.Read()) { SqlDataRecord record = new SqlDataRecord(smd); for (int i = 0; i < rdr.FieldCount; i++) { /*Mengeset plainteks dengan tiap nilai kembalian*/ RC4Engine.Plainteks = rdr[i].ToString(); /*Enkripsi nilai kembalian*/ RC4Engine.Encrypt(); /*Mengisi kontainer penampung dengan cipherteks*/ record.SetSqlString(i, RC4Engine.Cipherteks); } /*Mengirim kontainer ke client*/ SqlContext.Pipe.Send(record); } rdr.Close(); connection.Close(); } } };
3. Stored Procedure ChPwd Stored procedure ini dipanggil ketika proses pembuatan dan pengubahan kunci enkripsi dan dekripsi. Berikut implementasi ChPwd public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] /*Stored procedure ChPwd dengan 2 parameter yaitu kunci terdekripsi berupa array of byte dan nilai boolean untuk membuat atau mengubah kunci*/ public static void ChPwd(SqlBytes deckey,Boolean status) {
B‐21
String currentpassword=""; /*Membuat instan kelas RC4 dengan lunci default*/ RC4 RC4Engine = new RC4(); /*Membuat instan kelas kunci*/ Kunci manageKey = new Kunci(); if(status) { /*Melakukan pengubahan*/ /*get kunci lama dari basis data*/ currentpassword = manageKey.Key; /*set kunci enkripsi dekripsi dengan kunci lama*/ RC4Engine.Key = currentpassword; /*set nilai seed dengan 0*/ RC4Engine.Seed = 0; } char[] qc = new char[deckey.Length]; for (int i = 0; i < qc.Length; i++) { qc[i] = (char)deckey[i]; } /*Set nilai cipherteks dengan kunci terdekripsi*/ RC4Engine.Cipherteks = new String(qc); /*Dekripsi kunci lama dengan RC4*/ RC4Engine.Decrypt(); if(status) { manageKey.Status = true; } /*Set kunci baru dengan plainteks hasil dekripsi*/ manageKey.Key = RC4Engine.Plainteks; } };
Stored Procedure memanggil beberapa kelas seperti kelas Query, HashMD5 dan Kunci. Implementasi kelas Query dan HashMD5 sama seperti implementasi pada server web yang telah dijelaskan pada penjelasan sebelumnya. Berikut implementasi kelas Kunci. namespace SqlServerSP { public class Kunci { #region Constructor /*Konstruktor kelas Kunci*/ public Kunci() #endregion #region private Fields /*Atribut penyimpan kunci*/ private String key;
B‐22
/*Atribut status, true jika pengubahan dan false jika pembuatan*/ private bool status = false; #endregion #region Get & Set /*Method get dan set atribut kunci sekaligus melakukan get set kunci pada basis data*/ public String Key { get {/*Mengambil nilai atribut kunci*/ /*Nilai atribut kunci diambil dari tabel KeyTable pada basis data*/ String query = "select kunci from KeyTable"; String password = ""; using (SqlConnection conn = new SqlConnection("context connection=true")) { SqlDataAdapter adapter = new SqlDataAdapter(); SqlCommand Command = new SqlCommand(query, conn); conn.Open(); SqlDataReader rdr = Command.ExecuteReader(); while (rdr.Read()) { password = rdr.GetString(0); } rdr.Close(); conn.Close(); } this.key = password; /*Mengembalikan nilai kunci*/ return (this.key); } set {/*Mengeset nilai atribut kunci*/ String query = ""; using (SqlConnection conn = new SqlConnection("context connection=true")) { SqlCommand Command = new SqlCommand(); Command.Connection = conn; conn.Open(); if (status) { /*Jika status true maka query pengubahan KeyTable*/ query = "update KeyTable set kunci='" + value + "' where kunci='" + this.key + "'"; } else { /*Jika status true maka query insert KeyTable*/ query = "insert KeyTable(kunci) values('" + value + "')"; Command.CommandText = "delete KeyTable";
B‐23
Command.ExecuteNonQuery(); } Command.CommandText = query; Command.ExecuteNonQuery(); conn.Close(); } this.key = value; } } /*Method get dan set atribut status*/ public bool Status { get { return (this.status); } set { if (this.status != value) { this.status = value; } } } #endregion } }
B‐24
LAMPIRAN C IMPLEMENTASI ANTARMUKA Lampiran C ini merupakan penjabaran dari hasil implementasi antarmuka. Lampiran ini berisi seluruh antarmuka dalam perangkat lunak dalam tugas akhir ini. Perangkat lunak ini memiliki beberapa halaman antarmuka diantaranya halaman Index, halaman Login, halaman Eksplorasi basis data, halaman Tambah Baris, halaman Ubah Baris, halaman Ubah Password, halaman Register dan halaman Manajemen Kunci.
C.1
Implementasi Halaman Index Implementasi halaman Index dapat dilihat pada gambar C-1.
Gambar C‐1 Implementasi halaman Index
C‐1
C.2
Implementasi Halaman Login Implementasi halaman Login dapat dilihat pada gambar C-2.
Gambar C-2 Implementasi halaman Login
C.3
Implementasi Halaman Eksplorasi Basis Data Implementasi halaman Eksplorasi Basis Data dapat dilihat pada gambar C-3
Gambar C-3 Implementasi halaman Eksplorasi Basis Data
C‐2
C.4
Implementasi Halaman Tambah Baris Implementasi halaman Tambah Baris dapat dilihat pada gambar C-4
Gambar C-4 Implementasi halaman Tambah Baris
C.5
Implementasi Halaman Ubah Baris Implementasi halaman Ubah Baris dapat dilihat pada gambar C-5
Gambar C-5 Implementasi halaman Ubah Baris
C‐3
C.6
Implementasi Halaman Ubah Password Implementasi halaman Ubah Password dapat dilihat pada gambar C-6
Gambar C-6 Implementasi halaman Ubah Password
C.7
Implementasi Halaman Register Implementasi halaman Register dapat dilihat pada gambar C-7
Gambar C-7 Implementasi halaman Register
C‐4
C.8
Implementasi Halaman Manajemen Kunci Implementasi halaman Manajemen Kunci dapat dilihat pada gambar C-8
Gambar C-8 Implementasi halaman Manajemen Kunci
C‐5
LAMPIRAN D HASIL UJI PERANGKAT LUNAK D.1
Pengujian Use Case Login
Tabel D-1 Pengujian Use Case Login Identif ikasi
Deskripsi
Prosedur Pengujian
Masukan
Keluaran yang Diharapkan
Kriteria Evaluasi Hasil
Hasil yang Didapat
Kesimpulan
RP-1001
Pengujian login
• Pengguna memasukkan username dan password yang benar
Mengetikkan username=” Admin” dan password=” admin” pada form yang tersedia
Aplikasi menampilkan halaman menu utama dengan link sesuai dengan peruntukkan pengguna yang login
Aplikasi menampilkan halaman menu utama lengkap dengan link menu
Aplikasi menampilkan halaman menu utama lengkap dengan link menu.
Diterima
Mengetikkan username dan password yang salah pada form yang tersedia
Aplikasi menampilkan pesan kesalahan
Aplikasi menampilkan pesan kesalahan “Daftar Masuk Gagal Silahkan Coba lagi”.
Aplikasi menampilkan pesan kesalahan “Daftar Masuk Gagal Silahkan Coba lagi”.
Diterima
• Meng-klik link daftar masuk RP-1002
Pengujian login dengan masukkan salah
• Pengguna memasukkan username dan password yang salah • Meng-klik link daftar masuk
Dari pengujian use case Login maka dapat disimpulkan bahwa perangkat lunak mampu melakukan otentikasi username dan password untuk dapat masuk ke aplikasi.
D.2
Pengujian Use Case Query
Pengujian Use Case Query pada tugas akhir ini akan dibahas lebih mendalam bukan hanya dilihat dari sudut pandang pengguna tetapi juga dari sudut pandang aliran data. Untuk itu pada tugas akhir ini dibuat kasus uji yang spesifik dan jelas. Kasus uji dalam hal ini adalah sebuah basis data relasional dengan beberapa tabel dengan atribut berbagai tipe data. Penggunaan berbagai tipe data dimaksudkan untuk mengetes kompatibilitas perangkat lunak terhadap berbagai jenis tipe data. Sesuai dengan hasil implementasi kelas query, perangkat lunak ini dapat melakukan eksekusi query berbagai tipe data selain tipe data image. E-R diagram basis data pengujian dapat dilihat pada gambar D-1.
D‐1
Tempat_lahir
Alamat
Nomor_rekening
Balance
Rate
Nama Tanggal_lahir
Id
Status
Pelanggan
Nama Cabang
ATM_PIN
Penabung
Id
Tabungan
Nomor_rekening CabangTabungan
Peminjam
CabangPinjaman
Pinjaman
Nama Cabang
Cabang
Nomor_pinjaman Rate
Amount
Nama
Kota
Assets
Gambar D‐1 ER‐Diagram basis data Uji_TA
Struktur tabel basis data Uji_TA dapat dilihat pada tabel D-2. Tabel D-2 Struktur tabel basis data Uji_TA
No.
Nama Tabel
Nama Kolom
Tipe Data
Ukuran
Nulls
1.
Pelanggan
Id (primary key)
Char
10
Tidak
Nama
Varchar
50
Tidak
Alamat
Nchar
100
Ya
Tempat_lahir
Ntext
16
Ya
Tanggal_lahir
datetime
8
Ya
Nomor_pinjaman (primary key)
Integer
4
Tidak
Amount
Money
8
Tidak
2.
Pinjaman
D‐2
No.
3.
4.
5.
Nama Tabel
Tabungan
Penabung
Cabang
Nama Kolom
Tipe Data
Ukuran
Nulls
Rate
real
4
Ya
Nama_cabang
Varchar
20
Ya
Nomor_rekening (primary key)
Integer
4
Tidak
Balance
Money
8
Tidak
Rate
float
8
Ya
Nama_cabang
Varchar
20
Ya
Id_pelanggan (fk)
char
10
Ya
Nomor_rekening(fk)
Integer
4
Ya
Status
Bit
1
Ya
ATM_PIN
Binary
4
Tidak
Nama
Varchar
20
Tidak
Kota
Nchar
20
Ya
Assets
BigInteger
8
Ya
Pengujian Use Case Query yang akan dilakukan dapat dilihat pada tabel D-3. Tabel D-3 Pengujian Use Case Query Identif ikasi
Deskripsi
Prosedur Pengujian
Masukan
Keluaran yang Diharapkan
Kriteria Evaluasi Hasil
Hasil yang Didapat
Kesimpulan
RP-2001
Pengujian query select
• Pengguna melakukan pemilihan basis data, dilanjutkan pemilihan tabel
Klik pada treeview(Uji_TA > Pelanggan)
Aplikasi menampilkan isi tabel sesuai dengan pilihan dalam kasus uji ini menampilkan tabel Pelanggan.
Aplikasi menampilkan isi tabel sesuai pilihan
Aplikasi menampilkan isi tabel sesuai pilihan yaitu tabel Pelanggan.
Diterima
• Pemilihan dilakukan dengan cara melakukan expand atau select pada treeview halaman explorasi basis data
D‐3
Identif ikasi
Deskripsi
Prosedur Pengujian
Masukan
Keluaran yang Diharapkan
Kriteria Evaluasi Hasil
Hasil yang Didapat
Kesimpulan
RP-2002
Pengujian query insert
• Pengguna melakukan klik link add record
Nilai kolom pada textbox yang disediakan. Masukan disesuaikan dengan tipe data kolom. (Kesesuaian nilai dengan tipe dapat dilihat pada rincian kasus uji di bawah tabel).
Aplikasi melakukan penambahan baris sesuai dengan masukkan pada textbox
Baris baru terdapat pada tabel terpilih
Baris baru terdapat pada tabel terpilih
Diterima
Nilai kolom pada textbox yang disediakan. Masukan disesuaikan dengan tipe data kolom. (Kesesuaian nilai dengan tipe dapat dilihat pada rincian kasus uji di bawah tabel)
Aplikasi melakukan pengubahan terhadap baris terpilih sesuai dengan masukkan pada textbox
Baris terpilih berubah nilainya sesuai dengan nilai pengubahan
Baris terpilih berubah nilainya sesuai dengan nilai pengubahan
Diterima
• Memasukkan nilai pada textbox yang disediakan halaman add record • Menekan link tambah baris
RP-2003
Pengujian query edit
• Pengguna melakukan klik link edit yang terletak pada baris terpilih pada suatu tabel • Mengubah nilai pada textbox yang disediakan halaman edit record • Menekan link ubah baris
RP-2004
Pengujian query delete
• Pengguna melakukan klik link delete yang terletak pada baris terpilih pada suatu tabel
Klik delete pada baris terpilih suatu tabel (pada baris dengan Id 0028493630)
Aplikasi melakukan penghapusan pada baris terpilih dengan Id 0028493630
Baris yang dihapus tidak ada pada tabel
Baris yang dihapus yaitu record dengan Id 0028493630 tidak ada pada tabel
Diterima
RP-2005
Pengecek an visibilitas data selama transmisi.
• Pengguna melihat isi basis data.
Klik pada treeview
Data berupa traffic data yang diperoleh dengan menggunakan Wireshark
Data query yang terekam oleh Wireshark merupakan dataterenkripsi
Data query yang terekam oleh Wireshark merupakan dataterenkripsi
Diterima
Berikut penjelasan pengujian Use Case Query : 1. Hasil data yang ditampilkan pada perangkat lunak. Hasil data yang ditampilkan pada halaman eksplorasi basis data ditunjukkan oleh gambar D-2.
D‐4
Gambar D-2 Tabel Tabungan pada basis data Uji_TA
Gambar D-2 menunjukkan bahwa hasil yang proses enkripsi dan dekripsi data pada retrieve basis data berjalan dengan baik, hal itu ditunjukkan dengan tampilan basis data data bentuk plainteks. Selain itu gambar D-2 juga menunjukkan bahwa perangkat lunak mampu menampilkan isi tabel. Karena perangkat lunak mampu menampilkan isi tabel, maka secara otomatis fungsi menampilkan daftar basis data dan menampilkan daftar tabel berhasil. Hal itu disebabkan untuk mendapatkan isi tabel pengguna melakukan navigasi dengan melihat daftar basis data dan tabel. 2. Hasil data yang diperoleh dari hasil operasi. Operasi basis data khususnya insert, edit dan delete dapat berjalan dengan normal jika input data yang dimasukkan kompatibel dengan tipe data pada kolom terkait. Berikut kompatibilitas input data pada perangkat lunak sesuai dengan tipe data : 1. Tipe data berupa biginteger, integer, smallinteger harus berupa nilai integer tertentu yang dimasukkan melalui textbox yang tersedia. 2. Tipe data berupa char, varchar, nchar, ntext, nvarchar, text berupa kombinasi karakter alfa-numerik. 3. Tipe data berupa bit dapat berupa nilai integer dengan integer 0 berarti false dan lainnya berarti true, maupun string “true” atau “false”. 4. Tipe data sqlvar dapat berupa input jenis apapun. 5. Tipe data float dan real berupa integer maupun bilangan desimal 6. Tipe data numeric dan decimal dapat berupa integer maupun bilangan desimal 7. Tipe data binary dan varbinary dapat berupa integer maupun hexadecimal D‐5
8. Tipe data datetime berupa tanggal dengan urutan mm-dd-yyyy atau mm/dd/yyyy hh:mm:ss AM/PM(jam dalam format 12 jam). Untuk masukkan tahun dengan 2 digit, maka jika yy < 50 maka akan memberikan tahun 2000-2049 dan yy ≥ 50 maka akan memberikan nilai tahun 1950-1999. 9. Tipe data money berupa integer untuk menunjukkan sejumlah uang tertentu. Kasus uji operasi basis data dilakukan pada tabel Pelanggan basis data Uji_TA. Kasus uji pada pengujian insert record dapat dilihat pada gambar D-3 dan gambar D-4, yang merupakan gambar sebelum dan setelah operasi insert.
Gambar D-3 Tabel Pelanggan sebelum insert
Gambar D-4 Tabel Pelanggan setelah insert
Kasus uji edit record dapat dilihat pada gambar D-5 dan gambar D-6.
Gambar D‐5 Tabel Pelanggan sebelum edit
D‐6
Gambar D‐6 Tabel Pelanggan setelah edit
Operasi insert dan edit berjalan dengan baik jika input data pada perangkat lunak kompatibel dengan tipe data pada basis data. Kasus uji delete record dapat dilihat pada gambar D-7 dan gambar D-8.
Gambar D‐7 Tabel Pelanggan sebelum delete
Gambar D‐8 Tabel Pelanggan setelah delete
Dari beberapa pengujian terhadap operasi record dapat disimpulkan bahwa perangkat lunak mampu menerjemahkan perintah berbasis grafik dari pengguna menjadi sebuah query insert edit dan delete.
D‐7
3. Visibilitas data selama dalam transmisi pada jaringan. Visibilitas data selama dalam jaringan dapat dilihat dengan menggunakan kakas pengontrol jaringan bernama Wireshark, dengan kakas tersebut seluruh data yang melewati jaringan antarkomputer dapat dilihat dengan jelas. Wireshark diinstall pada komputer server dimana server basis data tersedia. Pada tugas akhir ini Wireshark digunakan untuk melihat traffic data yang mengalir dengan filter berupa ipaddress komputer server basis data dengan komputer server web. Hasil traffic data untuk transmisi data query dengan menggunakan perangkat lunak seperti terlihat pada gambar D-9 sebagai pembanding gambar D-10 merupakan traffic data tanpa menggunakan enkripsi RC4.
Gambar D‐9 Traffic Data Select Query Terenkripsi
Gambar D‐10 Traffic Data Select Query Plain
Hasil Query dengan menggunakan perangkat lunak dapat dilihat pada gambar D-11, sebagai pembanding gambar D-12 menampilkan hasil query tanpa enkripsi RC4.
D‐8
Gambar D‐11 Traffic Data Hasil Select Query Terenkripsi
Gambar D‐12 Traffic Data Hasil Select Query Plain
D‐9
Dari pengujian ini membuktikan bahwa perangkat lunak mampu mengamankan transmisi query dan hasil query dengan cara mengenkripsi data selama data tersebut berada dalam jaringan.
D.3
Pengujian Use Case Mengganti Password
Tabel D-4 Pengujian Use Case Mengganti Password Identif ikasi
Deskripsi
Prosedur Pengujian
Masukan
Keluaran yang Diharapkan
Kriteria Evaluasi Hasil
Hasil yang Didapat
Kesimpulan
RP-3001
Pengujian Mengganti Password
• Pengguna memasukkan password lama, password baru dan konfirmasi password.
Aplikasi melakukan perubahan password.
Aplikasi menampilkan pesan keberhasilan dan password berubah.
Aplikasi menampilkan pesan keberhasilan dan password berubah.
Diterima
• Meng-klik link ganti sandi
Mengetikkan password lama=”admin” , password baru=”newadmin” dan konfirmasi password=”newadmi n”pada form yang tersedia.
• Pengguna memasukkan password lama, password baru dan konfirmasi password.
Mengetikkan password lama yang salah=”tes”, password baru dan konfirmasi password pada form yang tersedia
Aplikasi menampilkan pesan kesalahan.
Aplikasi menampilkan pesan kesalahan “Sandi tidak valid”.
Aplikasi menampilkan pesan kesalahan “Sandi tidak valid”.
Diterima
Mengetikkan password lama=”admin”, password baru=”admin” yang artinya memiliki nilai sama dengan password lama dan konfirmasi password=”admin” pada form yang tersedia
Aplikasi menampilkan pesan kesalahan.
Aplikasi menampilkan pesan kesalahan “Sandi pengganti harus berbeda dengan sandi yang ada”.
Aplikasi menampilkan pesan kesalahan “Sandi pengganti harus berbeda dengan sandi yang ada”.
Diterima
Mengetikkan password lama, password baru=”tes” dan konfirmasi password=”tes2” yang artinya berbeda dengan password pada form yang tersedia
Aplikasi menampilkan pesan kesalahan.
Aplikasi menampilkan pesan kesalahan “Konfirmasi Sandi Pengganti harus sama dengan Sandi Pengganti”.
Aplikasi menampilkan pesan kesalahan “Konfirmasi Sandi Pengganti harus sama dengan Sandi Pengganti”.
Diterima
RP-3002
Pengujian Mengganti Password dengan password lama salah
• Meng-klik link ganti sandi RP-3003
RP-3004
Pengujian Mengganti Password dengan password penganti sama dengan password lama
• Pengguna memasukkan password lama, password baru, konfirmasi password.
Pengujian Mengganti Password dengan konfirmasi password yang salah
• Pengguna memasukkan password lama, password baru, konfirmasi password.
• Meng-klik link ganti sandi
• Meng-klik link ganti sandi
Dari pengujian use case Mengganti Password maka dapat disimpulkan bahwa perangkat lunak mampu melakukan pengubahan password pengguna dengan aman. D‐10
D.4
Pengujian Use Case Register
Tabel D-5 Pengujian Use Case Register Identif ikasi
Deskripsi
Prosedur Pengujian
Masukan
Keluaran yang Diharapkan
Kriteria Evaluasi Hasil
Hasil yang Didapat
Kesimpulan
RP-4001
Pengujian menambah akun dengan benar
• Administrator memasukkan username, password, konfirmasi password, pertanyaan keamanan dan jawaban dengan benar pada form tersedia.
Username=”fauzan”, password=”fauzanpa ssword”, konfirmasi password=”fauzanpa ssword”, pertanyaan keamanan dan jawaban dengan benar.
Aplikasi melakukan penambahan akun user.
Aplikasi menampilkan pesan keberhasilan dan akun terbuat.
Aplikasi menampilkan pesan keberhasilan dan akun terbuat.
Diterima
Username=”fauzan”, password=”fauzanpa ssword”, konfirmasi password=”fauzanpw d” yang artinya dengan password baru, pertanyaan keamanan dan jawaban dengan benar.
Aplikasi menampilkan pesan kesalahan.
Aplikasi menampilkan pesan kesalahan “Sandi dan Konfirmasi harus sama”.
Aplikasi menampilkan pesan kesalahan “Sandi dan Konfirmasi harus sama”
Diterima
username, password, konfirmasi password, dengan mengosongkan textbox pertanyaan keamanan dan jawaban dengan benar.
Aplikasi menampilkan pesan kesalahan berupa tanda * di sebelah kanan textbox.
Aplikasi menampilkan pesan kesalahan berupa tanda * di sebelah kanan textbox.
Aplikasi menampilkan pesan kesalahan berupa tanda * di sebelah kanan textbox.
Diterima
• Mengklik link buat akun RP-4002
Pengujian menambah akun dengan konfirmasi password salah
• Administrator memasukkan username, password, konfirmasi password, pertanyaan keamanan dan jawaban dengan benar pada form tersedia. • Mengklik link buat akun
RP-4003
Pengujian menambah akun dengan mengisi form tidak lengkap
• Administrator memasukkan username, password, konfirmasi password, pertanyaan keamanan dan jawaban dengan benar pada form tersedia, dengan salah satu masukkan kosong. • Mengklik link buat akun
RP4004
Pengujian menghapus akun terpilih
• Administrator mengklik delete pada baris akun yang ingin dihapus
Meng-klik delete pada baris username terpilih.
Aplikasi menghapus akun terpilih
Aplikasi menghapus akun terpilih dan menampilkan akun yang masih ada.
Aplikasi menghapus akun terpilih dan menampilkan akun yang masih ada.
Diterima
RP4005
Pengujian menghapus akun Admin
• Administrator mengklik delete pada baris akun Admin
Meng-klik delete pada baris Admin.
Aplikasi memunculkan pesan kesalahan
Aplikasi memunculkan pesan kesalahan
Aplikasi memunculkan pesan kesalahan “Admin tidak dapat dihapus”
Diterima
Dari pengujian use case Register maka dapat disimpulkan bahwa perangkat lunak mampu menambah maupun menghapus akun pengguna. D‐11
D.5
Pengujian Use Case Manajemen Kunci
Tabel D-6 Pengujian Use Case Manajemen Kunci Identif ikasi
Deskripsi
Prosedur Pengujian
Masukan
Keluaran yang Diharapkan
Kriteria Evaluasi Hasil
Hasil yang Didapat
Kesimpulan
RP-5001
Pengujian Menginisial isasi kunci
• Pengguna memasukkan kunci pada form tersedia.
Mengetikkan kunci enkripsi=”kunci” pada form tersedia.
Aplikasi melakukan pengesetan kunci pada file system maupun basis data.
Aplikasi menampilkan pesan keberhasilan dan kunci terinisialisasi.
Aplikasi menampilkan pesan keberhasilan dan kunci terinisialisasi.
Diterima
Mengetikkan kunci lama=”kunci”, kunci baru=”newkunci” dan konfirmasi kunci=”newkunci” pada form yang tersedia
Aplikasi menampilkan pesan keberhasilan.
Aplikasi menampilkan pesan keberhasilan.
Aplikasi menampilkan pesan keberhasilan.
Diterima
Mengetikkan kunci lama=”kunci”, kunci baru= “password” dan konfirmasi kunci=“password” pada form yang tersedia
Aplikasi menampilkan pesan kesalahan.
Aplikasi menampilkan pesan kesalahan “Penggantian Kunci gagal”.
Aplikasi menampilkan pesan kesalahan “Penggantian Kunci gagal”.
Diterima
• Meng-klik link set kunci RP-5002
Pengujian Mengganti kunci dengan kunci baru
• Pengguna memasukkan kunci lama dan baru dengan benar. • Meng-klik link ganti kunci
RP-5003
Pengujian Mengganti kunci dengan kunci yang tidak dapat disimpan oleh sistem.
• Pengguna memasukkan kunci lama dan baru yang tidak disimpan dengan benar. • Meng-klik link ganti kunci
Dari pengujian use case Manajemen Kunci maka dapat disimpulkan bahwa perangkat lunak mampu mengganti kunci enkripsi dan dekripsi.
D‐12