Java : Enkripsi SMS Menggunakan Message Authentication Code (MAC) Algoritma RC4 - Elang Sakti
Download Ebook Belajar Arduino PDF, Arduino untuk pemula
Jasa Pembuatan Program Arduino, pemrograman Arduino
# Hack Your Skills! to be Professional Mechatronics

Java : Enkripsi SMS Menggunakan Message Authentication Code (MAC) Algoritma RC4

4 komentar
Suatu ketika kita tidak ingin pesan rahasia kita (misal SMS) dibaca oleh orang lain. Atau kita tidak ingin pesan kita disadap kemudian dipalsukan. Untuk itu, pesan rahasia kita harus dikirim dengan cara yang benar. Untuk itu, kita harus memastikan dan melakukan otentifikasi bahwa pesan yang kita kirim itu tidak berubah dan pengirim yang benar. Ada dua teknik untuk melakukan otentikasi pesan, yaitu menggunakan Message Authentiation Code (MAC) dan menggunakan Digital Signature. Pada tulisan ini kita akan membahas implementasi MAC.

MAC adalah fungsi hash satu-arah yang menggunakan kunci rahasia dalam pembangkitan nilai hash. Maksudnya kita akan mempunyai kunci untuk mengirim dan membuka pesan rahasia yang sudah dienkripsi. Pembuatan MAC dapat dibangun dengan algoritma enkripsi pesan yang berbasiskan aliran (cipher aliran). Sebab, pada prinsipnya MAC akan membangkitkan suatu nilai acak yang konstan untuk semua panjang pesan dengan suatu kunci rahasia. Pada kasus ini, MAC akan dibuat dengan algoritma Rivest Code 4 (RC4).

Pemilihan Algoritma RC4 disebabkan karena algoritma ini sederhana dan mudah untuk diimplementasikan, serta sudah dipergunakan secara luas pada sistem keamanan seperti protokol SSL (Secure Socket Layer). Algoritma ini juga dinyatakan aman dan mempunyai proses enkripsi yang cepat karena proses enkripsinya cukup sederhana dan hanya melibatkan beberapa operasi per byte-nya.

RC4 membangkitkan aliran kunci (keystream) yang kemudian di-XOR-kan dengan plainteks pada waktu enkripsi (atau di-XOR-kan dengan bit-bit cipherteks pada waktu dekripsi). Tidak seperti cipher aliran yang memproses data dalam bit, RC4 memproses data dalam ukuran byte (1 byte = 8 bit). Berikut ini adala contoh source code dalam java untuk membangkitkan MAC menggunakan algoritma RC4.
/* RC4 and MAC with Java
 * coder: haripinter
 * mail : haripinter/@/gmail/./com
 */

class arcfour{
  public static int size = 256;
  public static int[] S = new int[size];

  public static String key256(String k){
    //bentuk 256 key
    String buff = null;
    if(k.length() < size){
      int x = 0;
      for(int i=0; i<size; i++){
        if(x >= k.length()){
          x = 0;
        }
        buff = buff+k.charAt(x);
        x++;
      }
    }
    return buff;
  }

  public static void permutasi(String key){
    //inisialisasi
    for(int i=0; i<size; i++){
      S[i] = i;
    }

    //permutasi
    int j = 0;
    for(int i=0; i<size; i++){
      j = (j + S[i] + key.charAt(i))%size;

      //swap
      int buff = S[i];
      S[i] = S[j];
      S[j] = buff;
    }
  }

  public static String encrypt(String text, String key){
    String k = key256(key);
    permutasi(k);

    String buff = "";
    int i=0, j=0;
    for(int x=0; x<text.length(); x++){
      i = (i+1)%size;
      j = (j+ S[i])%size;

      //swap
      int buf = S[i];
      S[i] = S[j];
      S[j] = buf;

      int t = (S[i]+S[j])%size;
      char K = (char)S[t];
      buff = buff+(char)(K^text.charAt(x));
    }
    return buff;
  }

  public static String getMAC(String teks, int[] s, String konci){
    String key = key256(konci);
    permutasi(key);

    String buff = "", tmp = "";
    int sizeMAC = 0;
    int div = teks.length() / 8;
    if((teks.length() % 8 ) == 0){
      sizeMAC = div;
    }else{
      sizeMAC = div+1;
    }

    int bit = 0;
    int i = 0, j = 0, k = 0;
    for(int x=0; x<teks.length(); x++){
      String ba  = Integer.toBinaryString(teks.charAt(x));
      tmp = tmp+ba.charAt(4);
      bit++;

      if((x == teks.length()-1) && bit<8){
        tmp = String.format("%8s", tmp).replace(' ', '0');
        bit = 8;
      }

      if(bit == 8){
        i = (i+1)%size;
        j = (j+S[i])%size;
        int buf = S[i];
        S[i] = S[j];
        S[j] = buf;

        int t = (S[i]+S[j])%size;
        char K = (char)S[t];
        char c = (char)((byte) Integer.parseInt(tmp, 2));
        buff = buff+(char)(K^c);
        //System.out.println("bit = "+buff+" "+teks.length());
        tmp = "";
        bit = 0;
        k++;
      }
    }
    return buff;
  }

  public static void main(String haripinter[]){
    String tekss = "haripinter aja deh... ";
    String konci = "a";

    String h;

    System.out.println();
    String chipe = encrypt(tekss,konci);
    System.out.println("Enkripsi \""+tekss+"\" dengan kunci \""+konci+"\" = "+chipe);

    h = getMAC(tekss,S,konci);
    System.out.println("\nMAC = "+h);

    System.out.println();
    String plain = encrypt(chipe,konci);
    System.out.println("Dekripsi \""+chipe+"\" dengan kunci \""+konci+"\" = "+plain);

    h = getMAC(plain,S,konci);
    System.out.println("\nMAC = "+h);

    String tet = plain+"z";
    String h1 = getMAC(tet,S,konci);
    if(h1 != h){
      System.out.println("Mac ini, "+h1+" = salah");
      System.out.println("Teks = "+tet);
    }
    //System.out.println("xxx");
  }
}

Java : Enkripsi SMS Menggunakan Message Authentication Code (MAC) Algoritma RC4


Semoga bermanfaat. :)

Written by ElangSakti
Java : Enkripsi SMS Menggunakan Message Authentication Code (MAC) Algoritma RC4
Bahasan: Suatu ketika kita tidak ingin pesan rahasia kita (misal SMS) dibaca oleh orang lain. Atau kita tidak ingin pesan kita disadap kemudian dip...
Published at Rabu, 06 Maret 2013, Updated at Rabu, 06 Maret 2013
Reviewed by dr. on
Rating: 4.7

4 komentar :

  1. Makasi mas.. membantu project android encryption messaging saya tutorialnya. .
    mohon ijin buat share kodingan RC4 nya, saya mau buat tutorial android encryption messaging
    http://sleepingtux.blogspot.com

    BalasHapus
  2. Sepertinya pernah buat kayak gini juga yaa... :D

    BalasHapus
  3. Sepertinya pernah ngalami ini deh... :D

    BalasHapus