Dalam kriptografi, cipher transposisi adalah metode enkripsi dimana posisi yang dimiliki oleh unit plaintext (yang umumnya karakter atau kelompok karakter) dialihkan sesuai dengan sistem yang teratur, sehingga ciphertext merupakan permutasi dari plaintext. Artinya, urutan unit berubah (plaintext yang diatur ulang / kembali). Secara matematis fungsi bijektif digunakan pada posisi karakter untuk mengenkripsi dan fungsi invers untuk mendekripsi.
Salah satu dari cipher transposisi yang terkenal adalah Transposisi Columnar. Dalam transposisi columnar, pesan ditulis dalam deretan yang panjangnya tetap, dan kemudian membaca lagi kolom per kolom. Kemudian dibaca per kolom sesuai dengan urutan angka yang didapat dari kata kunci yang dipilih. Lebar baris dan permutasi dari kolom biasanya ditentukan oleh kata kunci. Misalnya, kata ZEBRAS berarti jumlah kolom adalah sepanjang 6, dan permutasi didefinisikan oleh urutan abjad dari huruf-huruf dalam kata kunci. Dalam hal ini, order akan "6 3 2 4 1 5". A adalah urutan yang pertama, kemudian B diurutan kedua, selanjutnya E diurutan ketiga, dan seterusnya, sampai Z diurutan ke 6 atau terakhir.
Dalam columnar transposisi cipher biasa, spasi cadang diisi dengan nulls, artinya, spasi dihilangkan sehingga kalimat menjadi sedikit susah dibaca. Akhirnya, pesan dibaca sesuai urutan kolom, dalam urutan yang ditentukan oleh kata kunci. Misalnya, kita menggunakan ZEBRAS kata kunci dan pesan WE ARE DISCOVERED. FLEE AT ONCE. Kata tersebut menjadi : WEAREDISCOVEREDFLEEATONCEQKJEU. Kaliamat ini yang akan dimasukan dalam code java. Kalimat ini merupakan hasil dari kalimat asli , dikurangi spasi dan ditambah QKJEU supaya jumlahnya kelipatan dari 6. QKJEU bisa diganti apa saja sesuai keinginan pembuat kalimat.
Contoh dalam java, seperti dalam code berikut ini :
import java.awt.event.*;
import java.util.*;
import java.util.*;
public class transpositionCipher
{
public static void main(String args[])
{
String key;
String message;
String encryptedMessage;
// Letters in the x-axis
int x=0;
// Letters in the y-axis
int y=0;
key = "ZEBRAS";
message = "WEAREDISCOVEREDFLEEATONCEQKJEU";
encryptedMessage = "";
{
public static void main(String args[])
{
String key;
String message;
String encryptedMessage;
// Letters in the x-axis
int x=0;
// Letters in the y-axis
int y=0;
key = "ZEBRAS";
message = "WEAREDISCOVEREDFLEEATONCEQKJEU";
encryptedMessage = "";
// To set the temp as [x][y]
char temp[][]=new char [key.length()][message.length()];
char msg[] = message.toCharArray();
// To populate the array
x=0;
y=0;
// To convert the message into an array of char
for (int i=0; i< msg.length;i++)
{
temp[x][y]=msg[i];
if (x==(key.length()-1))
{
x=0;
y=y+1;
} // Close if
else
{
x++;
}
} // Close for loop
char temp[][]=new char [key.length()][message.length()];
char msg[] = message.toCharArray();
// To populate the array
x=0;
y=0;
// To convert the message into an array of char
for (int i=0; i< msg.length;i++)
{
temp[x][y]=msg[i];
if (x==(key.length()-1))
{
x=0;
y=y+1;
} // Close if
else
{
x++;
}
} // Close for loop
// To sort the key
char t[]=new char [key.length()];
t=key.toCharArray();
Arrays.sort(t);
for (int j=0;j<y;j++)
{
for (int i=0;i<key.length();i++)
{
System.out.print(temp[i][j]);
}
System.out.println();
}
char t[]=new char [key.length()];
t=key.toCharArray();
Arrays.sort(t);
for (int j=0;j<y;j++)
{
for (int i=0;i<key.length();i++)
{
System.out.print(temp[i][j]);
}
System.out.println();
}
System.out.println();
// To print out row by row (i.e. y)
for (int j=0;j<y;j++){
// To compare the the sorted Key with the key
// For char in the key
for (int i=0;i<key.length();i++){
int pos=0;
// To get the position of key.charAt(i) from sorted key
for (pos=0;pos<t.length;pos++){
if (key.charAt(i)==t[pos]){
// To break the for loop once the key is found
break;
}
}
System.out.print(temp[pos][j]);
encryptedMessage+=temp[pos][j];
}
System.out.println();
}
for (int j=0;j<y;j++){
// To compare the the sorted Key with the key
// For char in the key
for (int i=0;i<key.length();i++){
int pos=0;
// To get the position of key.charAt(i) from sorted key
for (pos=0;pos<t.length;pos++){
if (key.charAt(i)==t[pos]){
// To break the for loop once the key is found
break;
}
}
System.out.print(temp[pos][j]);
encryptedMessage+=temp[pos][j];
}
System.out.println();
}
System.out.println(encryptedMessage);
System.exit(0);
}
}
System.exit(0);
}
}
Sehingga setelah dikenai fungsi cipher tersebut, kalimat menjadi “EVLNA CDTES EAROF ODEEC WIREE
Tidak ada komentar:
Posting Komentar