Block Transposition

Block Transposition merupakan salah satu algoritma kriptografi klasik. Block Transposition menggunakan metode kriptografi simetrik, yaitu metode kriptografi yang menggunakan kunci yang sama dalam proses enkripsi dan deskripsi.
Proses Enkripsi Block Transposition

Dalam melakukan enkripsi plainteks dituliskan per kolom sesuai panjang kunci dan urutannya.. misalnya Plain Teks : Aku Bukanlah Dewa Kunci : kripto kemudian Kunci diberi indeks sesuai dengan urutan alfabet

k r i p t o

2 5 1 4 6 3 Nah jika kita sudah memberikan indeks pada kunci, kemudian kita akan membuat matriks dari plainteks dengan jumlah kolom sama dengan jumlah kunci

k r i p t o

2 5 1 4 6 3

A k u B u k

a n l a h D

e w a * * *

Dari matriks yang sudah dibuat maka kita dapat menentukan chiper teks berdasarkan nomor kolom pada index setiap kunci.

Kolom 1 (Kolom i ) : ula

Kolom 2 (Kolom k) : Aae

Kolom 3 (kolom o) : kD*

Kolom 4 (kolom p) : Ba*

Kolom 5 (kolom r) : knw

Kolom 6 (kolom t) : uh*

maka chiper teks nya : ulaAaekD*Ba*knwuh*

ketika sudah paham dengan teori nya , pertanyaannya sekarang bagaimana implementasi programnya ??? hehe implementasi programnya sangat mudah, kita hanya perlu memasukkan plainteks ke dalam matriks dua dimensi, kemudian mensorting berdasarkan index kuncin ya . Untuk lebih lengkapnya di bawah ini merupakan source code Enkripsi block Transposition dengan menggunakan bahasa pemrograman java :
Source code Enkripsi Block Transposition



/*
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.wahyu.Cryptho;

/**
*
* @author Wahyu Sumartha
*/


public class BlockTransposition {

private String key;
private String plainTeks;
private String cipherTeks = "";
private int[] integerKey;
private String tempKey;
private String tempPlainTeks;
private int baris;
private int kolom;
private String[][] matriks;
private int index = 0;
private int indexOfMin;

public void init() {
cipherTeks = "";
key = "";
plainTeks = "";
index = 0;
}
//isi matriks dengan karakter spasi

public void initMatriks() {
for (int i = 0; i < baris; i++) {
for (int j = 0; j < kolom; j++) {
matriks[i][j] = " ";
}
}
}

public String removeSpace(String var) {
String tempVar = "";
for (int i = 0; i < var.length(); i++) {
if (var.charAt(i) != ' ') {
tempVar += var.charAt(i);
}
}
return tempVar;

}

public int getIndexOfMin() {
int min = 100;
int indexMin = 0;
for (int i = 0; i < integerKey.length; i++) {
if (min > integerKey[i]) {
min = integerKey[i];
indexMin = i;
}
}
return indexMin;
}

public void setTempPlainTeks(String tempPlainTeks) {
this.tempPlainTeks = tempPlainTeks;
}

public String getTempPlainTeks() {
return tempPlainTeks;
}

public String getPlainTeks() {
plainTeks = removeSpace(getTempPlainTeks());
return plainTeks;
}

public void setTempKey(String tempKey) {
this.tempKey = tempKey;
}

public String getTempKey() {
return tempKey;
}

public String getKey() {
key = removeSpace(getTempKey());
return key;
}

public void isiMatriks() {
initMatriks();
getPlainTeks();
getKey();
kolom = getKey().length();
//menentukan jumlah baris
if (getPlainTeks().length() % getKey().length() == 0) {
baris = (getPlainTeks().length() / getKey().length());
} else if (getPlainTeks().length() % getKey().length() != 0) {
baris = (getPlainTeks().length() / getKey().length()) + 1;
}
matriks = new String[baris][kolom];
//Isi Matriks
for (int i = 0; i < baris; i++) {
for (int j = 0; j < kolom; j++) {
if (index < plainTeks.length()) {
matriks[i][j] = plainTeks.substring(index, index + 1);
index++;
} else {
matriks[i][j] = "*";
}

}
}

//cetak matriks
for (int i = 0; i < baris; i++) {
for (int j = 0; j < kolom; j++) {
System.out.print(matriks[i][j] + " ");
}
System.out.print("\n");
}
}

public String enkrip() {
integerKey = new int[key.length()];
for (int i = 0; i < key.length(); i++) {
integerKey[i] = Integer.parseInt(key.substring(i, i + 1));
System.out.print(integerKey[i] + " ");
}

System.out.println();
for (int i = 0; i < integerKey.length; i++) {
indexOfMin = getIndexOfMin();
integerKey[indexOfMin] = 100;
System.out.print(indexOfMin + " ");
for (int x = 0; x < baris; x++) {
cipherTeks += matriks[x][indexOfMin];

}
}


System.out.println("Chiper Teks : " + cipherTeks);
return cipherTeks;
}
}


Itu untuk enkripsi kalo deskripsi nya silahkan teman2 kembangkan sendiri..hehe.. Nanti kalo sempat akan saya posting deskripsi nya... OK

This entry was posted on 16:32 and is filed under . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 comments:

On 15 December 2009 at 05:40 , zlich said...

untuk dekripsinya mohon dijelaskan langkah-langkahnya.

 
On 23 October 2019 at 04:09 , Unknown said...

Duaaarrr