0% found this document useful (0 votes)
34 views4 pages

Aplikasi Kriptografi Hill Cipher Menggunakan Java GUI Netbeans

This document describes a Java GUI application for Hill cipher cryptography. The application allows users to enter a key matrix, encrypt and decrypt plain text messages using the Hill cipher algorithm, and displays the resulting cipher text. The application checks that the key matrix is invertible before allowing encryption and decryption. It uses common cryptographic techniques like modular arithmetic and taking elements modulo 26 for the English alphabet.

Uploaded by

YuanEko
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views4 pages

Aplikasi Kriptografi Hill Cipher Menggunakan Java GUI Netbeans

This document describes a Java GUI application for Hill cipher cryptography. The application allows users to enter a key matrix, encrypt and decrypt plain text messages using the Hill cipher algorithm, and displays the resulting cipher text. The application checks that the key matrix is invertible before allowing encryption and decryption. It uses common cryptographic techniques like modular arithmetic and taking elements modulo 26 for the English alphabet.

Uploaded by

YuanEko
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

TUGAS I

Aplikasi Kriptografi Hill Cipher


Menggunakan Java GUI Netbeans

Disusun oleh:

NAMA
NIM

: ABDURRAHMAN A. BULUATIE
: 122052006

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT SAINS DAN TEKNOLOGI AKPRIND
YOGYAKARTA
2013

package Tugas;
public final class HillChipper extends javax.swing.JFrame {
private static final int m = 26;
private final int[][] M = new int[2][2];
private final int[][] N = new int[2][2];
private final int p[] = new int[100];
private final int c[] = new int[100];
char[] f = new char[100];
public HillChipper() {
initComponents();
kontrolTbl();
}
private static int tambah(int a, int b) {
return (a + b) % m;
}
private static int kali(int a, int b) {
return (a * b) % m;
}
private static int inversTambah(int a) {
return (m - a);
}
private static int inversKali(int a) {
int hasil = -1;
for (int i = 1; i < m; i++) {
if (((a * i) % m) == 1) {
hasil = i;
}
}
return hasil;
}
private static boolean adaInvers(int a) {
boolean hasil = false;
for (int i = 1; i < m; i++) {
if (((a * i) % m) == 1) {
hasil = true;
}
}
return hasil;
}
public void GetM() {
M[0][0] = Integer.parseInt(tf1.getText());
M[0][1] = Integer.parseInt(tf2.getText());
M[1][0] = Integer.parseInt(tf3.getText());
M[1][1] = Integer.parseInt(tf4.getText());
}

public int[][] setKunci() {


int K[][] = {
{Integer.parseInt(tf1.getText()),
Integer.parseInt(tf2.getText())},
{Integer.parseInt(tf3.getText()),
Integer.parseInt(tf4.getText())}
};
return this.M;
}
public int[][] setKunciInvers() {
int K[][] = {
{Integer.parseInt(tf4.getText()), Integer.parseInt(tf2.getText())},
{-Integer.parseInt(tf3.getText()),
Integer.parseInt(tf1.getText())}
};
return this.N;
}
private static boolean CekDeterminan(int[][] M) {
int x = (M[0][0] * M[1][1]) % 26;
int y = (M[0][1] * M[1][1]) % 26;
int z = tambah(x, inversTambah(y));
return adaInvers(z);
}
public void kontrolTbl() {
enkripTBl.setEnabled(false);
dekripTbl.setEnabled(false);
plainteks.setEnabled(false);
tx2.setEnabled(false);
}
public void enablebtn() {
enkripTBl.setEnabled(true);
dekripTbl.setEnabled(true);
plainteks.setEnabled(true);
tx2.setEnabled(true);
}
private int[] enkrip(int[][] M, int[] p) {
String str;
str = plainteks.getText(); // mengambil nilai string
int i = 0;
int zz = 0;
for (int b = 0; b < str.length() / 2; b++) {
for (int j = 0; j < 2; j++) {
for (int x = 0; x < 2; x++) {
c[i] += M[j][x] * p[x + zz];

// mengalikan kunci dengan nilai konversi huruf ke angka


}
i++;
}
zz += 2;
}
return c;
}
private int[] dekrip(int[][] N, int[] c) {
String Btr;
Btr = chiperl.getText();
int i = 0;
int zz = 0;
for (int b = 0; b < Btr.length() / 2; b++) {
for (int j = 0; j < 2; j++) {
for (int x = 0; x < 2; x++) {
p[i] += N[j][x] * c[x + zz];
}
i++;
}
zz += 2;
}
return p;
}
public int[] setP() {
String str;
int i = 0;
str = plainteks.getText();
for (i = 0; i < str.length(); i++) {
int c1 = str.charAt(i);
p[i] = (c1) - 65;
// Mengisi array p dengan konversi String menjadi
bilangan integer
//untuk huruf kecil menggunakan angka 97
}
return p;
}
public int[] setC() {
String str;
int i = 0;
str = plainteks.getText();
for (i = 0; i < str.length(); i++) {
int p1 = str.charAt(i);
c[i] = (p1) - 65;
// Mengisi array p dengan konversi String menjadi
bilangan integer
//untuk huruf kecil menggunakan angka 97

}
return c;
}
@SuppressWarnings("unchecked")
private void
jButton1ActionPerformed(java.awt.event.ActionEvent
evt) {
GetM();
if (CekDeterminan(M)) {
labelcek.setText("Matrix memiliki invers");
} else {
labelcek.setText("Matrix tidak memiliki invers");
}
if (CekDeterminan(M)) {
enablebtn();
} else {
kontrolTbl();
}
}
private void
jButton2ActionPerformed(java.awt.event.ActionEvent
evt) {
tf1.setText("");
tf2.setText("");
tf3.setText("");
tf4.setText("");
}
private void
enkripTBlActionPerformed(java.awt.event.ActionEvent
evt) {
setP();
String str;
str = plainteks.getText();
enkrip(M, p);
for (int z = 0; z < str.length(); z++) {
f[z] = (char) ((c[z] % 26) + 65); // untuk huruf kecil
menggunakn angka 97
}
String s = new String(f).trim();
System.out.println("Hasil Enkripsi menjadi string =
" + s);
chiperl.setText(s);
}

private void
dekripTblActionPerformed(java.awt.event.ActionEvent
evt) {
setC();
String Btr;
Btr = plainteks.getText();
enkrip(N, c);
for (int z = 0; z < Btr.length(); z++) {
f[z] = (char) ((p[z] % 26) + 65); // untuk huruf kecil
menggunakn angka 97
}
String s = new String(f).trim();
System.out.println("Hasil Dekrip menjadi string = "
+ s);
tx2.setText(s);
chiperl.setText("");
}
private void
jButton3ActionPerformed(java.awt.event.ActionEvent
evt) {
chiperl.setText("");
plainteks.setText("");
tx2.setText("");
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new HillChipper().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel chiperl;
private javax.swing.JButton dekripTbl;
private javax.swing.JButton enkripTBl;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JLabel label;
private javax.swing.JLabel labelcek;

private javax.swing.JTextField plainteks;


private javax.swing.JTextField tf1;
private javax.swing.JTextField tf2;
private javax.swing.JTextField tf3;
private javax.swing.JTextField tf4;
private javax.swing.JTextField tx2;
// End of variables declaration
}

You might also like