Subscribe! Follow me! Add me Facebook! Plus me Google!

Wednesday, December 12, 2012

Source Code GPS EM-411 to Microcontroller



Dibawah ini adalah source code untuk mengakses GPS EM-411 menggunakan Microcontroller ATMega16.


#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <stdio.h> 
#include <stdlib.h>
#include <delay.h>

unsigned char data[60];
unsigned char sendx1[5],sendx2[12],sendy1[5],sendy2[12],valid[5];
unsigned char jam[2],menit[2],detik[2],kec[4];
unsigned char tanggal[6],tinggi[4];
int i,ln1,lt1,a,b=0;
float ln2,lt2,speed;
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xD23A >> 6;
TCNT1L=0xD23A & 0xff;
a++;
}

void main(void)
{
TCCR1A=0x00;
TCCR1B=0x04;
TIMSK=0x04;
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x8F;

lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
      {
      valid[0]=' ';
        valid[1]=' ';  
        i=0;  
        do{                  
            i++;
            data[i]=getchar();
            valid[1]=data[i];  
            if(data[i]=='')
                break;
            if(data[i-4]=='G' && data[i-3]=='P' && data[i-2]=='R' && data[i-1]=='M' && data[i]=='C')
            {            
                i=0;
                do{     
                    data[i]=getchar();
                    valid[1]=data[i];
                    if(data[i]=='')
                        break;                                                                    
                    i++;
                }while(data[i]!=0x0D);  
                sprintf(kec,"%c%c%c%c",data[39],data[40],data[41],data[42]);
                sprintf(sendx1,"%c%c",data[14],data[15]);
                sprintf(sendx2,"%c%c%c%c%c%c%c",data[16],data[17],data[18],data[19],data[20],data[21],data[22]);
                sprintf(sendy1,"%c%c%c%",data[26],data[27],data[28]);
                sprintf(sendy2,"%c%c%c%c%c%c%c",data[29],data[30],data[31],data[32],data[33],data[34],data[35]);  
                valid[0]=data[12]; 
                if(data[50]==',')
                    sprintf(tanggal,"%c%c%c%c%c%c",data[51],data[52],data[53],data[54],data[55],data[56]);
                if(data[49]==',')
                    sprintf(tanggal,"%c%c%c%c%c%c",data[50],data[51],data[52],data[53],data[54],data[55]); 
                sprintf(jam,"%c%c",data[1],data[2]);
                sprintf(menit,"%c%c",data[3],data[4]);
                sprintf(detik,"%c%c",data[5],data[6]);
            }    
           
        }while(data[i]!='$');
        
        i=0;  
        do{                  
            i++;
            data[i]=getchar();
            valid[1]=data[i];  
            if(data[i]=='')
                break;  
            if(data[i-4]=='G' && data[i-3]=='P' && data[i-2]=='G' && data[i-1]=='G' && data[i]=='A')
            {            
                i=0;
                do{     
                    data[i]=getchar();
                    valid[1]=data[i];
                    if(data[i]=='')
                        break;                                                                    
                    i++;
                }while(data[i]!=0x0D);  
                if(data[58]=='M')
                    sprintf(tinggi,"%c%c%c",data[54],data[55],data[56]);
                if(data[57]=='M')
                    sprintf(tinggi,"%c%c%c%c%c%c",data[53],data[54],data[55]); 
            }
        }while(data[i]!='$');
        
        if(valid[1]=='')
        {          
            data[i]=' ';
            valid[0]=' ';
            valid[1]=' ';
            lcd_clear();
            lcd_gotoxy(0,0);
            lcd_putsf("Disconnected");
            for(i=12;i<=15;i++)
            {                               
                lcd_gotoxy(i,0);
                lcd_putsf(".");
                delay_ms(800);    
                PORTC.3=0;
                delay_ms(700);    
                PORTC.3=1;  
            }
        }                                                                     
        if(valid[0]=='V')
        {                
            valid[0]=' ';
            valid[1]=' ';
            lcd_clear();
            lcd_gotoxy(0,0);
            lcd_putsf("Wait");
            for(i=4;i<=7;i++)
            {                               
                lcd_gotoxy(i,0);
                lcd_putsf(".");
                delay_ms(800);    
                PORTC.3=0;
                delay_ms(700);    
                PORTC.3=1;  
            }  
        }                  
        if(valid[0]=='A')
        { 
            if(b==0)
            {      
            lt1=atoi(sendx1);
            lt2=atof(sendx2);
            lt2=(lt2/60)+lt1;
            sprintf(sendx2,"%0.6f",lt2);
            lcd_clear();    
            lcd_gotoxy(0,0);
            lcd_putsf("Lt: -");
            lcd_gotoxy(5,0);
            lcd_puts(sendx2);
            lcd_gotoxy(15,0);
            lcd_putsf("S");
        
            ln1=atoi(sendy1);
            ln2=atof(sendy2);
            ln2=(ln2/60)+ln1;
            sprintf(sendy2,"%0.6f",ln2);
            lcd_gotoxy(0,1);
            lcd_putsf("Ln: ");
            lcd_gotoxy(4,1);
            lcd_puts(sendy2);      
            lcd_gotoxy(15,1);
            lcd_putsf("E");  
            if(a>=5)
            {        
                b=1;
                a=0;
            } 
            }   
             if(b==1)
            {      
            lcd_clear();
            lcd_gotoxy(0,0);
            lcd_puts(tanggal);
            
            lcd_gotoxy(0,1);
            lcd_puts(jam);
            lcd_gotoxy(2,1);
            lcd_putsf(":");
            lcd_gotoxy(3,1);
            lcd_puts(menit);
            lcd_gotoxy(5,1);
            lcd_putsf(":");
            lcd_gotoxy(6,1);
            lcd_puts(detik); 
            lcd_gotoxy(8,1);
            lcd_putsf("  ");
            
            if(a>=10)
            {        
                b=2;
                a=0;
            }
            } 
             if(b==2)
            {       
            speed=atof(kec);
            speed=speed*1.852;
            sprintf(kec,"%0.3f",speed);
            lcd_clear();    
            lcd_gotoxy(0,0);
            lcd_putsf("Speed:");
            lcd_gotoxy(7,0);
            lcd_puts(kec);
            lcd_gotoxy(10,0);
            lcd_putsf("km/jam");
              
            lcd_gotoxy(0,1);
            lcd_putsf("Tinggi:");
            lcd_gotoxy(8,1);
            lcd_puts(tinggi);      
            lcd_gotoxy(11,1);
            lcd_putsf("meter");
            
            if(a>=5)
            {        
                b=0;
                a=0;
            }
            }
        }  
      };
}

untuk penjelasannya, silahkan tanyakan saja :D

Friday, November 2, 2012

Implementasi Algoritma Kriptografi Klasik Pada Aplikasi Chat

Pendahuluan 

    1.1.      Latar Belakang
Keamanan dalam kehidpuan saat ini adalah hal yang sangat penting. Arti dari keamanan itu sendiri adalah menjaga suatu unsur yang sangat penting dari tindakan yang tidak diinginkan, beberapa contohnya adalah informasi dan pesan. Jika kita bertukar pesan (misal surat), maka kita tentu ingin pesan yang kita kirim sampai ke pihak yang dituju dengan aman. Maksud aman itu sendiri berarti bahwa selama pengiriman tentu kita tidak ingin isi pesan dibaca oleh orang yang tidak berhak karena mungkin pesan yang kita kirim adalah pesan rahasia.
Contoh lain dalam dunia teknologi saat ini cara pengiriman pesan mungkin tidak harus lagi memakai secarik kertas sebagai media pesan, sekarang kita bisa menggunakan banyak aplikasi untuk bertukar pesan seperti email,chating, dan lain sebagainya.
Maka secara riil hubungannya jika pesan pada email atau chat itu sangat penting dan harus dijaga kerahasiaannya maka pencegahaannya adalah menerapkan sistem keamanan pada chat tersebut untuk mencegah dari orang yang tidak berhak misalnya sniffing.
Dalam masalah keamanan yang disebutkan tersebut bisa diselesaikan dengan menggunakan kriptografi. Kriptografi tidak hanya menyediakan alat untuk keamanan pesan, tetapi juga merupakan suatu kumpulan teknik dalam menyembunyikan kerhasiaan pesan.
Oleh karena itu pada pembahasan ini dibuat suatu aplikasi sistem “Implementasi Algoritma Kripografi Klasik Pada Aplikasi Chat”

    1.2.      Pengertian Kriptografi
Kriptografi (Cryptography) berasal dari bahasa yunani yaitu “cryptos” artinya rahasia, sedangkan “graphien” artinya tulisan, jadi kriptografi itu adalah tulisan rahasia. Dengan kata lain kriptografi adalah ilmu dan seni untuk menjaga kerahasiaan pesan dengan cara menyandikannya ke dalam bentuk yang tidak dapat dimengerti maknanya.
Dalam kriptografi ada beberapa istilah yang sering ditemukan yaitu “Plainteks, dan Cipherteks”. Plainteks ada pesan atau teks jelas. Pesan bisa berisi data atau informasi yang dikirim oleh kurir, saluran telekomunikasi dan lain sebagainya. Cipherteks adalah pesan yang tersandi.
Proses merubah plainteks menjadi cipherteks disebut enkripsi. Sedangkan proses kebalikannya disebut dekripsi.
Kriptografi dibuat adalah untuk menghindari dari penyadap. Penyadap adalah orang yang mencoba melihat pesan saat dikirim.

    1.3.      Tujuan Kriptografi
Beberapa tujuan kriptografi adalah :
a.       Menjaga kerahasiaan informasi.
b.      Untuk menjamin bahwa informasi masih utuh dan belum pernah dimanipulasi.
c.       Untuk mencegah bahwa pihak yang berkomunikasi tidak melakukan penyangkalan.

    1.4.      Jenis – jenis Kriptografi
Berdasarkan sejarah ada dua jenis kriptografi :
a.       Kriptografi Klasik
b.      Kriptografi Modern


Pembahasan

    2.1.      Algoritma Kriptografi Klasik
Beberapa contoh algoritma kriptografi klasik yang dibahas adalah Caesar Cipher dan Vigenère Cipher.

a.       Caesar Cipher
Pada pengujian kriptografi Caesar Cipher, tiap huruf ditukar atau disubstitusikan dengan huruf ketiga berikutnya dari susunan alfabet yang sama, atau dengan kata lain pergeseran 3 huruf selanjutnya.

Tabel substitusi :

Plainteks
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Cipherteks
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C



b.       Vigenère Cipher
Vigenère Cipher sangat dikenal karena mudah dipahami dan mudah juga untuk diimplementasikan. Pada proses enkripsi Vigenère Cipher menggunakan bujursangkar Vigenère. Setiap baris dalam bujur sangkar menyatakan huruf – huruf Cipherteks yang diperoleh dengan Caesar Cipher.
Bujursangkar Vigenère digunakan untuk memperoleh Cipherteks dengan menggunakan kucni yang sudah ditentukan. Jika panjang kunci lebih pendek daripada panjang plainteks, maka kunci diulang penggunaannya.


Tabel Vigenère

Contoh :
      Plainteks          : SEKURITAS  KOMPUTER
      Kunci              : UKM
Plainteks
S
E
K
U
R
I
T
A
S
Kunci
U
K
M
U
K
M
U
K
M
Cipherteks
MOWOBINKE



    2.2.      Implementasi Kriptografi Klasik Pada Aplikasi Chat

a.       Pengertian Chat
Chat bisa diartikan adalah komunikasi melalui jalur internet yang transmisinya realtime atau langsung dari pesan berbasis teks. Chat dapat berkomunikasi multicast atau dari satu pengirim ke banyak penerima.

b.      Tujuan
Tujuan penerapan kriptografi pada chat yaitu untuk pencegahan dari penyadap atau sniffing karena transmisi yang dikeluarkan chat berupa teks langsung dan komunikasinya bisa multicast, artinya kemungkinan pihak ke tiga untuk menyadap sangat mudah.

c.       Implementasi
Pada pembuatan aplikasi chatnya menggunakan java sebagai bahasa pemrogramannya dan wireshark sebagai uji hasil sebagai sniffing.

Berikut output dari Chat yang menggunakan Algoritma Caesar Cipher :


Berikut adalah potongan program dari Caesar Cipher.
 ..........
 abjadY = new char[teks[1].length()];
 de = new int[teks[1].length()];
 dekripsi = new char[teks[1].length()];
 for(int i=0;i<teks[1].length();i++){
         abjadY=teks[1].toCharArray();                  
 }
 for(int i=0;i<teks[1].length();i++){
         de[i]=(int)abjadY[i];                   
         de[i]=(de[i]-3)%127;
dekripsi[i]=(char)de[i];
 }
 .......................
//////////// Enkripsi ////////////
        str = chatc.length();
        abjadX = new char[str];
        en = new int[str];
        enkripsi = new char[str];
        for(int i=0;i<str;i++){
            abjadX=chatc.toCharArray();                  
        }
        for(int i=0;i<str;i++){
            en[i]=(int)abjadX[i];                   
            en[i]=(en[i]+3)%127;
            enkripsi[i]=(char)en[i];
        }
        chatc="";
        for(int i=0;i<str;i++){
            chatc+=Character.toString(enkripsi[i]);
        }
        ////////////////////////////////// 

Berikut output dari Chat yang menggunakan Algoritma Vigenère Cipher:





Berikut adalah potongan program pada aplikasinya :
private String enkripsi(String plain, String key){       
        if(plain.length()==0 || key.length()==0) return null;
        else{
            for(int i=0;i<key.length();i++)
                if(key.charAt(i)==' ')
                    return null;           
            char[] temp = new char[plain.length()];
            int arr=0;
            for(int i=0;i<plain.length();i++){
                if(plain.charAt(i)==' ')
                    temp[i] = ' ';
                else{
                    temp[i] = key.charAt(arr);
                    if(arr+1==key.length())
                        arr = 0;
                    else
                        arr++;
                }
            }
            key = new String(temp);           
            char[] Cipher = new char[plain.length()];
            for(int i=0;i<Cipher.length;i++){
                int r = vAlfa.indexOf(key.charAt(i));
                int c = vAlfa.indexOf(plain.charAt(i));
                if(plain.charAt(i)==' ') Cipher[i] = ' ';
                else Cipher[i] = matriks[r][c];
            }
           
            System.out.println("Enkripsi");
            System.out.println("Plain Text  : "+plain);
            System.out.println("Key         : "+key);
            System.out.println("Cipher Text : "+new String(Cipher)+"\n");
            return (new String(Cipher));                   
        }
    }
  

    private String dekripsi(String plain, String key){       
        if(plain.length()==0 || key.length()==0) return null;
        else{
            for(int i=0;i<key.length();i++)
                if(key.charAt(i)==' ')
                    return null;
           
            char[] temp = new char[plain.length()];
            int arr=0;
            for(int i=0;i<plain.length();i++){
                if(plain.charAt(i)==' ')
                    temp[i] = ' ';
                else{
                    temp[i] = key.charAt(arr);
                    if(arr+1==key.length())
                        arr = 0;
                    else
                        arr++;
                }
            }
            key = new String(temp);
            
            char[] Cipher = new char[plain.length()];
            for(int i=0;i<Cipher.length;i++){
                int r = vAlfa.indexOf(key.charAt(i));
                int c = vAlfa.indexOf(plain.charAt(i));
               
                if(plain.charAt(i)==' ')
                    Cipher[i] = ' ';
                else{
                    int x = (c-r) % 128;
                    if(x>=0)
                        Cipher[i]=vAlfa.charAt(x);
                    else
                        Cipher[i]=vAlfa.charAt(x+128);
                }
            }
            System.out.println("Dekripsi");
            System.out.println("Plain Text  : "+plain);
            System.out.println("Key         : "+key);
            System.out.println("Cipher Text : "+new String(Cipher)+"\n");
            return (new String(Cipher));                   
        }
    }

Berikut adalah pengujian menggunakan wireshak :
1.      Jalankan Program Wrieshark



  
2.     Klik Interface List




3.      Pilih interface yang berjalan pada aplikasi chat ini, klik start





4.      Setelah itu akan muncul tampilan seperti ini


5.  Kemudian untuk melihat perbedaan antara aplikasi yang menggunakan kriptografi dan yang memakai kriptografi adalah pertama – tama jalankan aplikasi chat yang tanpa menggunakan kriptografi.

6.      Setelah itu lihat apakah isi pesan terlihat pada wireshark




7.      Kemudian jalankan aplikasi chat yang menggunakan kriptografi

Gambar Aplikasi Chat Caesar Cipher


Gambar Aplikasi Chat Vigenere Cipher



8.      Lihat apakah isi pesan terlihat pada wireshark







Maka terlihatlah perbedaan antara chat yang menggunakan kriptografi dan yang tidak menggunakan kriptografi, bahwa isi pesan sulit dibaca karena sudah dienkripsi.




Kesimpulan

Dari seluruh pembahasan ditarik beberapa kesimpulan, bahwa :
1.      Kriptografi sangat diperlukan dalam teknologi saat terutama pada jalur komunikasi internet untuk mencegah dari bahaya sniffing atau penyadapan.
2.      Setiap sistem keamanan hanya dapat meminimalisir pencegahan dari yang tidak diinginkan dalam artian bahwa suatu sistem keamanan apapun tidak seluruhnya aman pasti ada titik lemahnya. Dalam bahasan ini karena yang dipakai adalah metode kriptografi klasik, jadi kekuranganya adalah :
a.   Kriptanalis dapat dengan mudah untuk mendekripsi dari Cipherteks tanpa harus mengetahui kuncinya.
b.   Tidak dapat menghindari dari serangan Fabrication, Modification dan penyangkalan oleh pihak kedua bahwa pesan yang dikirim bukan berasal dari pihak kedua, kecuali jika diterapkan metode Sign Digital atau Tanda Tangan Digital pada enkripsinya.





Daftar Referensi

Rinaldi Munir. Kriptografi". Informatika, Bandung, Oktober 2006.
http://en.wikipedia.org/wiki/Caesar_cipher
http://en.wikipedia.org/wiki/Vigenère_cipher
http://en.wikipedia.org/wiki/Online_chat