• Tidak ada hasil yang ditemukan

BAB 5 KESIMPULAN DAN SARAN

5.2. Saran

Penulis ingin memberikan beberapa saran yang mungkin berguna untuk pengembangan lebih lanjut yaitu :

1. Perangkat lunak dapat dikembangkan agar dapat digabungkan dengan

pembelajaran untuk metode kriptografi yang lain.

DAFTAR PUSTAKA

Budiono. 2008. Penerapan Tanda Tangan Digital untuk Otentikasi SMS-Banking. Program Studi Teknik Informatika, Universitas Institut Teknologi Bandung, Bandung.

Falani, A.Z. 2014. Sistem Pengaman File dengan Menggunakan Metode RSA Kriptografi & Digital Signature. Fakultas Ilmu Komputer, Universitas Narotama, Surabaya.

Fernando, Ricky. 2009. Studi dan Implementasi Tanda Tangan Digital dengan Menggunakan Algoritma Elgamal. Program Studi Teknik Informatika ITB, Bandung.

Kurniawan, Yusuf. 2004. Kriptografi Keamanan Internet Dan Jaringan Komunikasi.

Informatika. Bandung.

Michels, M., Naccache, D., & Petersen, H. 1996. GOST 34.10 – A Brief Overview of

Russia’s DSA. Publish in Computers & Seccurity 15(8) : 725-732. Munir, R. 2006. Kriptografi. Informatika, Bandung.

Piper, F., Murphy, S. 2002. Cryptography A Very Short Introduction. Oxford University Press. England.

Sadikin, R. 2012. Kriptografi untuk Keamanan Jaringan. Yogyakarta: Penerbit Andi.

Saipul. 2010. Implementasi Tanda Tangan Digital Menggunakan Fungs Hash Algoritma SHA-256 dan RSA dalam Proses Otentikasi Data. Universitas Ahmad Dahlan, Yogyakarta.

Schneier, B. 1996. Applied Cryptograph. Second edition, John Willey & Sons.

Sinlae, A.A.J. 2012. Analisis Kriptosistem Menggunakan Digital Signature berbasis Algoritma SHA-512 dan RSA. Magister Sistem Informasi, Universitas Kristen Satya Wacana, Salatiga.

Siregar, N. 2012. Strategi Otentikasi Pesan Menggunakan Digital Signature Dengan Metode DSA (Digital Standard Algorithm). Program Studi Ilmu Komputer, Universitas Sumatera Utara, Medan.

Stallings, W. 2005. Cryptography and Network Security Principles and Practices.

Supriyanto, Aji. 2009. Pemakaian Kriptografi Kunci Publik untuk Proses Enkripsi dan

Tanda Tangan Digital pada Dokumen E-Mail. Fakultas Teknologi Informasi,

Universitas Stikubank, Semarang.

Tulu, B., Samir, C., Deborah, L., Haiqing, L., Brian, N.H., Thomas, A.H. 2004. Desain and Implementation of a Digital Signature Solution for a Healthcare Enterprise. Proceeding of the Tenth Americas Conference on Information Systems, New York.

Wahyuni, Ana. 2011. Aplikasi Kriptografi untuk Pengamanan E-Dokumen dengan Metode Hybrid : Biometrik Tandatangan dan DSA (Digital Signature Algorithm). Universitas Diponegoro, Semarang.

Wijaya, Victor. 2007. Tanda Tangan Digital Untuk Pesan Singkat Dengan Algoritma RSA Menggunakan J2ME. Program Studi Teknik Informatika Institut Teknologi Bandung.

LISTING PROGRAM

1. Pembentukan Kunci

// Pembentukan kunci

Private void buttonBuatKunciActionPerformed(java.awt.event.ActionEvent evt) {

GOST gost = new GOST(); PQA pqa = new PQA();

BigInteger[] pq = pqa.generation(); BigInteger P = pq[0]; BigInteger Q = pq[1]; BigInteger A = pq[2]; if (gost.syarat1a_cek_pq(P, Q)) { if (gost.syarat1b_cek_a(P, Q, A)) { BigInteger X = gost.syarat1c_acak_x(Q); BigInteger Y = A.modPow(X, P); } } }

private void buttonTempatKunciActionPerformed(java.awt.event.ActionEvent evt) {

JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("Pilih File");

chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setAcceptAllFileFilterUsed(false);

if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

labelTempatKunci.setText(chooser.getSelectedFile().toString()); }

else {

labelTempatKunci.setText("");

labelKeterangan.setText("Tempat Kunci Belum Ditentukan"); }

}

private void buttonSimpanKunciActionPerformed(java.awt.event.ActionEvent evt) {

if (textFieldP.getText().trim().equals("") || textFieldQ.getText().trim().equals("") || textFieldA.getText().trim().equals("") || textFieldX.getText().trim().equals("") || textFieldY.getText().trim().equals("")) {

labelKeterangan.setText("Isi Kunci Tidak Boleh Kosong"); return;

}

String kunci_private = String.valueOf(P) + "-" + String.valueOf(Q) + "-" + String.valueOf(A) + "-" + String.valueOf(X);

String kunci_publik = String.valueOf(P) + "-" + String.valueOf(Q) + "-" + String.valueOf(A) + "-" + String.valueOf(Y);

FileOutputStream fileOutputStream;

byte[] byte_kunci_private = kunci_private.getBytes(); try

{

fileOutputStream = new

FileOutputStream(labelTempatKunci.getText().toString() + “\\kunci_private”);

try {

fileOutputStream.write(byte_kunci_private); fileOutputStream.close();

41

}

catch (IOException ex) {

ex.printStackTrace(); }

}

catch (FileNotFoundException ex) {

ex.printStackTrace(); }

byte[] byte_kunci_publik = kunci_publik.getBytes();

try { fileOutputStream = new FileOutputStream(labelTempatKunci.getText().toString() + "\\kunci_publik"); try { fileOutputStream.write(byte_kunci_publik); fileOutputStream.close(); }

catch (IOException ex) {

ex.printStackTrace();

labelKeterangan.setText("Pembuatan Kunci Gagal"); }

}

catch (FileNotFoundException ex) {

}

}

private void jMenu5MouseClicked(java.awt.event.MouseEvent evt) {

this.setVisible(false);

PembentukanKunci pembentukanKunci = new PembentukanKunci(); pembentukanKunci.setVisible(true);

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new PembentukanKunci().setVisible(true);

}

}); }

2. Pembentukan Tanda Tangan Digital

//Membaca file kunci privat

private void buttonBuatTandaTanganActionPerformed (java.awt.event.ActionEvent evt)

{

BufferedReader bufferedReader_kunci_private = null; String isi_kunci_private;

try {

bufferedReader_kunci_private = new BufferedReader(new

FileReader(labelKunciPrivate.getText())); try

43

{

if ((isi_kunci_private = bufferedReader_kunci_private.readLine())!=null)

{

String[] pqars = isi_kunci_private.split("-");

GOST gost = new GOST();

//Proses hash pada dokumen BigInteger HM = null; String teks; try { teks = baca_dokumen(labelDokumen.getText().toString()); try { HM = gost.syarat_2a_hash256(teks, Q); }

catch (NoSuchAlgorithmException ex) {

Logger.getLogger(TandaTangan.class.getName()).log(Level.SE VERE, null, ex);

}

catch (UnsupportedEncodingException ex) {

Logger.getLogger(TandaTangan.class.getName()).log(Level.SE VERE, null, ex);

}

{

Logger.getLogger(TandaTangan.class.getName()).log(Level.SE VERE, null, ex);

} }

catch (InvalidFormatException ex) {

ex.printStackTrace(); }

//Pembentukan tanda tangan digital

BigInteger K = gost.syarat2b_k(Q.subtract(BigInteger.ONE)); BigInteger[] RS = gost.syarat2c_rs(P, Q, A, X, HM, K); BigInteger R = RS[0];

BigInteger S = RS[1];

//isi kunci : p - q - a - y - r - s

String tandaTangan = String.valueOf(R) + "-" + String.valueOf(S); try

{

XWPFDocument doc = new

XWPFDocument(OPCPackage.open(fileName)); doc.write(newFileOutputStream(labelTempatTandaTangan.get Text().toString() + "\\output.docx")); setMeta(tandaTangan,labelTempatTandaTangan.getText().toSt ring() + "\\output.docx"); }

catch (InvalidFormatException ex) {

ex.printStackTrace(); }

} }

45

catch (IOException ex) {

ex.printStackTrace();

}

}

catch (FileNotFoundException ex) {

ex.printStackTrace();

}

}

//Menyimpan tanda tangan kedalam metadata file

public static void setMeta(String tandaTangan, String url) throws

InvalidFormatException, IOException {

OPCPackage opc = OPCPackage.open(url);

PackageProperties pp = opc.getPackageProperties(); Nullable<String> foo = pp.getLastModifiedByProperty(); System.out.println(foo.hasValue() ? foo.getValue() : "empty"); pp.setSubjectProperty(tandaTangan.toString());

opc.close(); }

public static String baca_dokumen(String file) throws IOException,

InvalidFormatException {

String teks = "";

XWPFDocument doc = new XWPFDocument(OPCPackage.open(file)); for (XWPFParagraph p : doc.getParagraphs())

{

for (XWPFRun r : p.getRuns())

{

} } System.out.println(teks); return teks; } 3. Verifikasi Dokumen

public static String baca_dokumen(String file) throws IOException,

InvalidFormatException {

String teks = "";

XWPFDocument doc = new XWPFDocument(OPCPackage.open(file)); for (XWPFParagraph p : doc.getParagraphs())

{

for (XWPFRun r : p.getRuns())

{

teks = teks + p.getText(); }

}

System.out.println(teks); return teks;

}

//Membaca tanda tangan pada metadata

public static String getMeta(String url) throws InvalidFormatException, IOException {

String tandaTangan = "";

OPCPackage opc = OPCPackage.open(url);

PackageProperties pp = opc.getPackageProperties(); Nullable<String> foo = pp.getLastModifiedByProperty();

tandaTangan = String.valueOf(pp.getSubjectProperty().getValue()); System.out.println("Tanda : " + tandaTangan);

47

opc.close();

return tandaTangan; }

//Verifikasi dokumen

private void buttonVerifikasiActionPerformed(java.awt.event.ActionEvent evt) { String teks = ""; try { teks = baca_dokumen(labelDokumen.getText().toString()); }

catch (IOException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex); }

catch (InvalidFormatException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex); }

BufferedReader bufferedReader_kunci_publik = null;

String isi_kunci_pulik; try

{

bufferedReader_kunci_publik = new BufferedReader(new

FileReader(labelKunciPublik.getText())); }

catch (FileNotFoundException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex); }

try {

if ((isi_kunci_pulik = bufferedReader_kunci_publik.readLine()) != null) {

String[] pqay = isi_kunci_pulik.split("-"); try

{

isiTandaTangan = getMeta(labelDokumen.getText().toString());

System.out.println("Tanda Tangan : " + isiTandaTangan); }

catch (InvalidFormatException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex); }

String[] rs = isiTandaTangan.split("-"); BigInteger R = new BigInteger(rs[0]); BigInteger S = new BigInteger(rs[1]);

GOST gost = new GOST(); BigInteger HM = null; try { try { HM = gost.syarat_2a_hash256(teks, Q); }

49

{

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex);

}

catch (FileNotFoundException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex);

}

catch (NoSuchPaddingException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex);

} }

catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } textFieldHM.setText(String.valueOf(HM)); BigInteger V = gost.syarat3a_v(HM, Q); BigInteger Z1 = gost.syarat3b_z1(S, V, Q); BigInteger Z2 = gost.syarat3c_Z2(Q, R, V); BigInteger U = gost.syarat3d_u(P, Q, A, Y, Z1, Z2); if (U.equals(R)) {

labelStatus.setText("Tanda Tangan Valid"); }

else {

labelStatus.setText("Tanda Tangan Tidak Valid"); }

catch (IOException ex) {

Logger.getLogger(Verifikasi.class.getName()).log(Level.SEVERE, null, ex); }

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() { public void run() {

new Verifikasi().setVisible(true); }

}); }

Dokumen terkait