Tutorial Pemrograman Kriptografi C++ dan Java

Zae
Dibawah ini merupakan source code  algoritma AES 128 menggunakan bahasa pemrograman java. Disini inputan atau plainteks nya berupa string, untuk yang file akan saya posting berikutnya. Source saya Run menggunakan Netbeans. Agar source dapat dijalankan, download dulu "The Bouncy Castle Crypto package" ,  silahkan download di SINI. Selanjutkan tambahkan file .jar tersebut di Libraries. 

Berikut source code nya :

package aes;

/**
 *
 * @author zae
 */
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class Main {
  public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    byte[] input = "tes".getBytes();
    byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
        0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };

    SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

    System.out.println(new String(input));

    // encryption pass
    cipher.init(Cipher.ENCRYPT_MODE, key);

    byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
    int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    ctLength += cipher.doFinal(cipherText, ctLength);
    System.out.println(new String(cipherText));
    System.out.println(ctLength);

    // decryption pass
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
    int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    ptLength += cipher.doFinal(plainText, ptLength);
    System.out.println(new String(plainText));
    System.out.println(ptLength);
  }
}

Penjelasan dari source code diatas adalah

* Input berupa string, dalam kasus ini, saya meng-enkrip : "tes"
   byte[] input = "tes".getBytes();

*Kunci yang dipakai adalah "123456789abcdef"
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

dimana keyBytes adalah array byte yang isinya kunci
byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; 

* algoritma yang dipakai adalah AES, dalam hal ini AES 128, karena kunci yang dipakai 128 bit
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

Setelah di Run maka hasilnya sebagai berikut
run:
tes                 //output
System.out.println(new String(input));
O�, qX(PNN�y �    //output System.out.println(new String(cipherText));
16                  //output System.out.println(ctLength);
tes                 //output System.out.println(new String(plainText));
3                   //output System.out.println(ptLength);

Selamat dicoba
 
Zaenal Suhardono
Zae
Blowfish dan twofish keduanya dirancang oleh orang yang sama, yaitu Bruce Schneier. Namun keduanya berasal dari masa yang berbeda. Blowfish merupakan algoritma yang lebih tua, ia dirancang pada tahun 1993. Tujuan perancangannya adalah untuk menggantikan algoritma DES yang sudah sangat tua (sejak 1977). Algoritma DES sendiri merupakan algoritma standar kriptografi yang ditetapkan oleh NIST – sebuah lembaga yang mengatur tentang standar-standar. Antara DES dan blowfish memiliki banyak kesamaan. Kesamaan mendasar adalah keduanya memiliki panjang blok yang sama, yaitu 64 bit. Namun tentu blowfish karena jauh lebih muda, memiliki banyak kelebihan dibandingkan dengan DES. Blowfish sangat terkenal di dunia kriptografi, alasan utamanya adalah karena lisensinya yang bebas dan gratis. Bahkan komunitas open source menghargai blowfish dengan mempercayai blowfish menjadi salah satu Open Cryptography Interface (OCI) pada kernel Linux versi 2.5 keatas.
Sedangkan twofish adalah suksesor dari blowfish. Pada tahun 1997, dengan kemajuan teknologi prosesor yang sangat cepat, maka bukanlah ahal yang sulit untuk menjebol algoritma kriptografi dengan panjang kunci 64 bit. Untuk itu NIST membuka sayembara untuk umum. Semua pihak boleh mensubmit algoritmanya, namun tentu dengan syarat-syarat kualitas minimum, seperti panjang blok minimum 128 bit. Twofish merupakan salah satu peserta, dan berhasil meraih posisi 5 besar, dan bahkan secara tidak resmi mendapatkan posisi 2 besar. Lima besar algoritma yang lolos semuanya memiliki tingkat keamanan yang hampir seimbang, sehingga penilaian disampingkan menjadi performansi kecepatan. Twofish dan rijndael bersaing memperebutkan posisi teratas. Twofish unggul di nomor kunci 256 bit, namun kalah di nomor kunci 128 bit. Akhirnya rijndael yang keluar sebagai pemenang dan berubah nama menjadi AES, suksesor dari DES.

Pengen tahu lebih dalam mengenai algoritma blowfish dan twofish silahkan download artikel ini
(sumber: http://www.informatika.org/~rinaldi/Kriptografi/2006-2007/Makalah1/Makalah1-004.pdf)
 
Zaenal Suhardono