Tag: Pemrograman

Key Generation

Salah satu cara untuk memperkuat hasil dari sebuah proses enkripsi adalah dengan menggunakan kunci yang relatif panjang. Cara ini bisa ditempuh dengan 2 metode. Pertama, user memasukkan kunci yang panjangnya real (nyata). Kedua, dengan memberikan nilai random pada kunci. Banyak cara dan metode yang ditawarkan untuk membangkitakan kunci random, namun dalam tulisan ini saya mencoba menggunakan metode sederhana yaitu dengan membangkitakan kunci berdasarkan nilai (kunci) awal yang kita masukkan.

Adapun langkah-langkah pembangkitan kunci sebagai berikut:
1. karakter terakhir dari kunci dijumlahkan dengan n-1 karakter sebelumnya (n adalah panjang kunci asli), kemudian jumlah tersebut
dimodulo 26.
2. Hasil modulo merupakan karakter baru yang kemudian digabungkan dengan kunci sebelumnya menjadi kunci baru.
3. Kembali ke langkah pertama sampai kunci tersebut sepanjang plaintext.
Continue reading “Key Generation”

Advertisements

Teknik Enkripsi Blocking

Ada beberapa teknik dasar kriptografi, antara lain: Substitusi, Blocking, Permutasi, Ekspansi, dan Pemampatan (Compaction). Nah…. dalam tulisan ini saya mau membahas sedikit tentang teknik dasar kriptografi menggunakan teknik Blocking.

Sistem enkripsi terkadang membagi plaintext menjadi blok-blok yang terdiri dari beberapa karakter yang kemudian dienkripsikan secara independen. Plaintext dimasukkan kedalam matriks yang mempunyai jumlah kolom yang sudah didefinisikan, sedangkan jumlah barisnya bergantung pada panjang plaintext. Misal:
Plaintext: Math 310 Proves!
Setelah dimasukkan kedalam matriks:

Dengan menggunakan enkripsi blocking dipilih jumlah lajur dan kolom untuk penulisan pesan. Jumlah lajur atau kolom menjadi kunci bagi kriptografi dengan teknik ini. Plaintext dituliskan secara vertikal ke bawah berurutan pada lajur, dan dilanjutkan pada kolom berikutnya sampai seluruhnya tertulis. Ciphertext-nya adalah Continue reading “Teknik Enkripsi Blocking”

RC4 Encryption

Berikut ini adalah source code sederhana untuk enkripsi RC4. Source code ini dibuat menggunakan bahasa pemrograman Java.


import java.io.*;
//import java.lang.Character;
/**
*
* @author zlich
*/
public class RC4 {
public static void main (String [] args) throws IOException {
int [] key = null;
int keylen = 0;
int k = 0;
int [] SBox = new int [256];

DataInputStream input = new DataInputStream(System.in);

//inisialisasi S-Box
for (int i = 0; i 0) {
key = new int [keylen];
}
for (k=0; k<keylen; k++) {
key[k] = kunci.charAt(k);

System.out.print(key[k] + " ");
}

//permutasi S-Box
int i, j = 0;
for (i=0; i<256; i++) {
j = (j + SBox[i] + key[i % key.length]) % 256;

//swap
int temp = SBox[i];
SBox[i] = SBox[j];
SBox[j] = temp;
}

//Input Plaintext
System.out.println("\nPlaintext: ");
String plaintext = input.readLine();

//PRGA
int a = 0;
int b = 0;
for (i=0; i<plaintext.length(); i++) {
a = (a + 1) % 256;
b = (b + SBox[a]) % 256;

//swap
int temp = SBox[a];
SBox[a] = SBox[b];
SBox[b] = temp;

//pseudorandom generation
int pseudo = SBox[(SBox[a] + SBox[b]) % 256];
int chartext = plaintext.charAt(i);

//XOR
int chiper = pseudo ^ chartext;
System.out.print(Integer.toHexString(chiper).toUpperCase()); //chipertext
//System.out.print(Character.toChars(chiper));
}
}
}

Source codenya masih menggunakan prosedural, untuk pendekatan OOP sedang diusahakan.

Kalau dicompile terus dieksekusi outputnya kayak gini:
Key:
pwd12
112 119 100 49 50
Plaintext:
Math 310 Proves!
6CA86FE3CBC33C162595C3E78B9C97BC

Selamat Mencoba!!