Senin, 15 Oktober 2012

Aplikasi SMS Kriptografi di Java Menggunakan Vigenere

Pada artikel kali ini, saya akan membagikan source code Aplikasi SMS Kriptografi di Java Menggunakan Vigenere, maksudnya SMS yang kita kirim akan di enkripsi dan hasil enkripsi ini akan dikirim ke nomor tujuan, dan yang menerimanya harus akan mendekripsikan pesan yang telah terenkripsi ini jika pesan tidak dapat dibaca dengan baik. jika anda ingin mengerti proses enkripsinya seperti apa anda bisa lihat disini, dan untuk proses sms gatewaynya bisa lihat disini :-)
 
Anda tidak bisa langsung copas dari source code yang udah di download, karena akan banyak warning dan error, pertama download Library Sun Java Comm v2 (win32) untuk pengguna microsoft. ini link download nya download.

Setelah selesai download, silahkan ekstrak dan didalamnya seperti gambar dibawah ini :

File yang saya kasih tanda panah itu silahkan di copy ke :
1. Pilih file comm.jar lalu tempatkan pada direktori JDKDIR/jre/lib/ext/
2. Pilih file javax.comm.properties lalu tempatkan pada tempatkan pada direktori JDKDIR/jre/lib/
3. Pilh file win32com.dll lalu
tempatkan pada direktori JDKDIR/jre/bin/

JDKDIR itu adalah JDK Directory silahkan cari di Program Files/Java/ biasanya ada disini, tapi tergantung dulu anda melatatkkannya dimana.

Setelah, selasai silahkan download source codenya : download 

Ini screenshootnya:


Sumber :
1. Untuk librarynya dan penginstallannya : bemzinside.wordpress.com
2. Untuk Teknik SMS Gateway : rachmad-hw.blogspot.com

Langkah-Langkah SMS Gateway GSM

SMS (Short Messaging Services) Data SMS (Short Messaging Services) yang kita kirim atau yang kita terima sebenarnya memiliki format tersendiri untuk dapat diterjemahkan oleh sebuah mobile phone. Format atau mode yang dipakai untuk mengirim dan menerima SMS sebenarnya ada dua yaitu mode text dan mode PDU (Protocol Data Unit). Akan tetapi, sistem mode text tidak didukung oleh semua operator GSM maupun terminal.

1. Text Mode Mode ini adalah cara termudah untuk mengirim pesan. Pada mode teks pesan yang kita kirim tidak dilakukan konversi. Teks yang dikirim tetap dalam bentuk aslinya dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8 bit) karakter. Sesungguhnya, mode teks adalah hasil encode yang direpresentasikan dalam format PDU. Kelemahannya, kita tidak dapat menyisipkan gambar dan nada dering ke dalam pesan yang akan dikirim serta terbatasnya tipe encoding.

2. PDU (Protocol Data Unit) Mode PDU mode adalah format message dalam heksadesimal octet dan semi-desimal octet dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8 bit) karakter. Kelebihan menggunakan mode PDU adalah kita dapat melakukan encoding sendiri yang tentunya harus pula didukung oleh hardware dan operator GSM, melakukan kompresi data, menambahkan nada dering dan gambar pada pesan yang dikirim. Beberapa tipe encoding yang umum digunakan adalah “PCCP437”, “PCDN”, “8859-1”, “IRA” dan “GSM”. Kita juga dapat menambahkan header ke dalam pesan yang akan dikirim, seperti timestamp, nomor SMSC dan meta-informasi lainnya. 2.1.1 Sistem Kerja SMS Pada saat kita mengirim pesan SMS dari handphone (mobile originated) pesan tersebut tidak langsung dikirim ke handphone tujuan (mobile terminated), akan tetapi dikirim terlebih dahulu ke SMS Center (SMSC), baru kemudian pesan tersebut diteruskan ke handphone tujuan.



Gambar 1
Dengan adanya SMSC ini dapat mengetahui status dari pesan SMS yang telah dikirim, apakah telah sampai atau gagal diterima oleh handphone tujuan. Apabila handphone tujuan dalam keadaan aktif dan dapat menerima pesan SMS yang dikirim, ia akan mengirim kembali pesan konfirmasi ke SMSC yang menyatakan bahwa pesan telah diterima. Kemudian SMSC mengirimkannya kembali status tersebut kepada si pengirim. Jika handphone dalam keadaan mati, pesan yang dikirimkan akan disimpan pada SMSC sampai period-validity terpenuhi. 2.1.2 Koneksi ke SMSC Untuk dapat mengirim dan menerima pesan, kita harus melakukan koneksi ke SMSC. Ada beberapa cara untuk melakukan koneksi ke SMSC antara lain : · Menggunakan terminal baik berupa GSM modem atau handphone. Cara ini adalah yang paling mudah tetapi memiliki kekurangan antara lain jumlah pesan yang dikirim per menit sangat terbatas (sekitar 6-10 pesan per menit). Untuk mengantisipasi hal ini biasanya digunakan lebih dari satu terminal.

· Koneksi langsung ke SMSC Dengan melakukan koneksi langsung ke SMSC kita dapat mengirim pesan dalam jumlah banyak, dapat mencapai sekitar 600 SMS per menit bergantung pada kapasitas dari SMSC itu sendiri. Untuk melakukan koneksi ke SMSC diperlukan protocol penghubung. Protocol yang umum digunakan adalah UCP, SMPP, CIMD2, OIS dan TAP. Masing–masing operator GSM menyediakan tipe protocol yang berbeda-beda.

· Menggunakan software Bantu Saat ini banyak vendor telekomunikasi menawarkan software bantu untuk melakukan koneksi ke SMSC, dari yang bersifat freeware, open source sampai dengan yang komersial. Pemilihan koneksi ke SMSC biasanya disesuaikan dengan jumlah pesan SMS yang akan dikirim. Gambar dibawah ini menunjukkan skema tipe koneksi ke SMSC.

2.1.3 Mode Pengiriman dan Penerimaan SMS dengan PDU

Data yang mengalir ke atau dari SMS-Center harus berbentuk PDU (Protokol Data Unit). PDU berisi bilangan-bilangan heksadesimal yang mencerminkan bahasa I/O. PDU berisi atas beberapa header. Header untuk kirim SMS ke SMS-Center berbeda dengan SMS yang diterima dari SMS-Center.

A. PDU untuk kirim SMS ke SMS-Center Terdapat delapan header untuk mengirim SMS, yaitu : 1. Nomor SMS-Center Header pertama ini terbagi atas tiga subheader, yaitu :
a. Jumlah pasangan Heksadesimal SMSC dalam bilangan heksa
b. National/International code
* untuk National, kode subheader-nya yaitu 81
* untuk International, kode subheader-nya yaitu 91
c. No SMS-Center-nya sendiri, dalam pasangan heksa dibalik-balik. Jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka tersebut akan dipasangkan dengan huruf F didepannya. Contoh : untuk nomor SMSC Excelcom 62818445009 dapat diubah menjadi
a. 07 --> ada 7 pasang
b. 91 --> 1 pasang
c. 26-18-48-54-00-F9 --> 6 pasang
Digabung menjadi : 07912618485400F9
1. Telkomsel 62811000000 07912618010000F0
2. Satelindo 62816125 059126181652
3. Exelcom 62818445009 07912618485400F9
4. Indosat-M3 62855000000 07912658050000F0


2. Tipe SMS
Untuk SEND tipe SMS = 1. Jadi bilangan heksanya adalah 01.
3. Nomor Referensi SMS
Nomor referensi ini dibiarkan dulu 0, jadi bilangan heksanya adalah 00. Nanti akan diberikan nomor referensi otomatis oleh ponsel atau alat SMS gateway.
4. Nomor Ponsel Penerima

a. Jumlah bilangan desimal nomor ponsel yang dituju dalam bilangan heksa.
b. National/International code * untuk National, kode subheader-nya yaitu 81 * untuk International, kode subheader-nya yaitu 91

c. Nomor ponsel yang dituju, dalam pasangan Heksa dibalik-balik. Sama dengan cara penulisan subheader SMSC.

Contoh : untuk nomor ponsel yang dituju = 628129573337 dapat diubah menjadi
a. 0C à ada 12 angka
b. 91 c. 26-18-92-75-33-73 Digabung menjadi 0C91 261892753373

5. Bentuk SMS, antara lain : 0 à 00 à dikirim sebagai SMS
1 --> 01 --> dikirim sebagai telex
2 -->02 --> dikirim sebagai fax 6. Skema Encoding Data I/O Ada dua skema, yaitu :

a. Skema 7 bit à ditandai dengan angka 0 -->00
b. Skema 8 bit à ditandai dengan angka lebih besar dari 0 à diubah ke heksa Kebanyakan ponsel atau SMS gateway yang ada di pasaran sekarang menggunakan skema 7 bit.


7. Jangka Waktu Sebelum SMS Expired
Agar SMS kita pasti terkirim sampai ke ponsel penerima, sebaiknya kita tidak memberikan batasan waktu validnya.

8. Isi SMS
Header ini terdiri atas dua subheader, yaitu :

a. Panjang isi (jumlah huruf dari isi)
Misalnya : untuk kata “hello” --> ada 5 huruf --> 05
b. Isi berupa pasangan bilangan heksa

· Untuk ponsel/SMS gateway berskema encoding 7 bit, jika kita mengetikkan suatu huruf dari keypad-nya, berarti kita telah membuat 7 angka 1/0 berurutan.

Ada dua langkah yang harus dilakukan untuk mengkonversi isi SMS, yaitu :
1. mengubah menjadi kode 7 bit, contoh kata “hello”

bit 7 1
h -->110 1000
e -->110 0101
l --> 110 1100
l --> 110 1100
o --> 110 1111

mengubah kode 7 bit menjadi 8 bit, yang diwakili oleh pasangan heksa. E 8

h 1 110 1000 3 2
e 00 11 0010 9 B
l 100 1 1011 F D
l 1111 1101 0 6
o 0000 0 110

Dengan demikian kata “hello” hasil konversinya E8329BFD06
Menggabungkan kedelapan header untuk mengirim kata “hello” ke ponsel nomor 628129573337 lewat SMS-Center Excelcom, tanpa membatasi jangka waktu valid, maka PDU lengkapnya adalah : 07912618485400F901000C9126189275337300000E8329BFD06

Copas From : Dunia Rachmad

Minggu, 14 Oktober 2012

Konversi Desimal Ke Hexadesimal

Nie screenshoot input :

Nie screenshoot output : 

Nie link download source code: download

Konversi Biner Ke Desimal di Java

Aplikasi ini, masih sangat sederhana sekali, dan aplikasi ini masih belum ada penanganan errornya, masih banyak kekurangan...misal input diganti dengan huruf apilikasi ini masih belum didesain untuk kasus seperti itu, silahkan yang mau ngembangin aplikasi ini...
Nie screenshot inputnya : 


Nie screenshot outputnya :


Nie link download source codenya : download

Jumat, 12 Oktober 2012

Konversi Desimal Ke Biner

Hmz, ini ada latihan lagi...Desimal ke Biner pakek java, dalam source code yang saya upload ini ada 2 cara, yang pertama memanfaatkan String sebagai konversinya, lalu cara yang kedua adalah cara standart yang digunakan untuk konversi bilangan Desimal ke Biner, silahkan pelajari source codenya, semoga ini bermanfaat buat kalian.

Ini Contoh inputnya...


Lalu ini adalah outputnya...

Dan ini link download source codenya : download

Latihan Kalkulator Sederhana

Halo, ini ada file latihan saya....tentang kalkulator basic, nanti program ini akan menghitung, inputan String anda. nie contoh inputannya.



Lalu, Outputnya :


Dan ini, link download source code-nya : download

Rabu, 10 Oktober 2012

Pengenalan Array 2 Dimensi di Java

          Sekarang kita akan mempelajari array 2D, konsepnya hampir sama dengan array 1D, tetapi array 2D ini mempunyai baris dan kolom, untuk pengaksesan array ini tetap menggunakan indeks array tetapi yang digunakan adalah indeks baris dan indeks kolom, nanti untuk loopingnya kita gunakan looping 2 layer, maksudnya didalam looping ada looping lagi atau biasa disebut nested loop, daripada bingung… langsung lihat aja source code-nya...



          Pada baris ke-14 sampai ke-16, adalah proses deklarasi array dua dimensi, dan menentukan isi dari baris dan kolomnya, sebenarnya banyak cara untuk deklarasi array ini, pie pada kesempatan kali saya menggunakan yang tipe ini.

          Untuk lebih mudah mempelajarinya, saya nanti akan membuat outputan yang berisi daftar kelompok, Kelompok Pertama berisikan {Roni, Rista, Yogi, Irfan}, lalu kelompok Kedua berisikan {Hanafi, Slamet, Romza, Nina}, lalu yang terakhir atau Kelompok Ketiga berisikan {Wahyu, Fiki, Lusi, Ali}. 

          Cara membuat outputan seperti itu bisa dilihat pada baris ke-20 sampai baris ke-29, looping for yang pertama atau layer 1, digunakan untuk pengaksesan baris, looping for yang kedua atau layer 2, digunakan untuk pengaksesan kolom baris ke-i, nie urutan-urutan eksekesinya simak dengan baik.

Langkah 1.
          Pertama deklarasi variabel baris dengan nilai 0, 

Langkah 2.
          Lalu, pengecekan kondisi apakah baris < kelompok.length , sekarang nilai baris adalah 0, sedangkan nilai kelompok.length adalah 3 jadi apakah 0<3, maka hasilnya benar(True).

Langkah 3.
          Jika hasil dari kondisi tersebut bernilai  benar(True) maka akan mengeksekusi baris perintah yang di dalam looping for layer 1, lihat baris  21 sampai baris 28 itulah perintah yang ada pada looping for layer 1, lalu akan mengerjakan baris demi baris, pertama akan mengeksekusi System.out.println(“Daftar Kelompok ke-”+ (++idxBaris)); perintah ini adalah untuk mencetak Daftar Kelompok ke-idxBaris, sedangkan idxBaris mempunyai nilai 1, jadi hasilnya akan mencetak Daftar Kelompok ke-1, lalu akan mengeksekusi baris berikutnya, dan kebetulan baris berikutnya adalah looping for,  berikut alur eksekusi untuk looping for layer 2.

       Langkah 3.1
              Deklarasi variabel kolom dengan nilai 0.

       Langkah 3.2      
Lalu Pengecekan kondisi looping for layer 2, apakah kelompok < kelompok[baris].length, nilai variabel kelompok sekarang adalah 0 sedangkan nilai kelompok[baris].length adalah 4, mengapa bernilai 4, mari kita cek statement kelompok[baris].length statement ini digunakan untuk mengakses kolom………baris ke-0, sedangkan jumlah kolom pada baris ke-0 adalah 4, jadi nilai kelompok[baris].length adalah 4 dan derpadat perbedaan statement untuk mengakses kolom dan baris, jika ingin mengakses sebuah baris maka statementnya baris < kelompok.length sedangkan untuk mengakses sebuah kolom pada baris menggunakan statement kelompok[baris].length.
Kembali ke pengecekan kondisi kelompok < kelompok[baris].length jadi apakah 0 < 4 maka hasilnya adalah benar(True).

       Langkah 3.3
          Jika kondisi Looping For Layer 2 ini bernilai benar(True) maka akan mengeksekusi baris perintah yang terdapat di Looping For Layer 2 lihat baris-24, System.out.println(++idxKolom + “. ”+kelompok[baris][kolom]) maksudnya adalah akan mencetak nilai dari idxKolom sedangkan nilai idxKolom sudah diincrement jadi nilainya 1, terus kelompok[baris][kolom] lah ini inti pengaksesan array 2 Dimensinya, maksudnya nanti akan mencetak nilai dari kelompok indeks baris ke-baris dan indeks kolom ke-kolom , nilai dari baris adalah 0 dan kolom masih 0, jadi si-java akan mencetak array kelompok[0][0], dan isinya adalah ‘Rony’.

Langkah 3.4
 Jika sudah mengeksekusi  kode program yang didalam Looping For Layer 2, lalu si java akan menaikkan nilai variabel kolom , yang semula bernilai 0 sekarang berubah menjadi 1, lalu si-java akan kembali ke Langkah 3.2, Langkah 3.3, Langkah 3.4, begitu seterusnya…sampai kondisi looping for layer 2 ini bernilai salah, dan looping for layer 2 ini akan selesai lalu akan melanjutkan kode program yang di bawah struktur looping for layer 2 lihat baris- 26 sampai 28 itu adalah kode program dibawah struktur looping for layer 2.

Ini masih didalam langkah 3, tetapi masih didalam Looping For Layer 1 dan diluar Looping For Layer 2, lihat baris ke-27 dan 28 perintahnya simpel untuk yang baris ke-27 menginisialisasi variabel idxKolom menjadi 0, lalu yang berikutnya cuman mencetak doank.

Langkah 4.
Setelah mengeksekusi semua baris perintah yang terdapat didalam Looping For Layer 1, maka si-java akan menaikkan nilai variabel baris, dan akan kembali ke Langkah 2, Langkah 3 dan sub-sub Langkah 3, dan kembali menaikkan variabel baris di Langkah 4, dan looping ini akan berakhir ketika kondisi looping for layer 1 salah.
 
Dan inilah hasil outputnya.

 Semoga penjelasan diatas dapat bermanfaat bagi kalian. :-D Good Luck Selamat Mencoba

Pengenalan Array 1 Dimensi di Java

Kali ini, saya akan membahas tentang array satu dimensi pada java, misal kita ingin membuat himpunan nama kelompok, kita bisa menggunakan fasilitas array ini. Langsung saja...berikut source codenya…


Maksud dari baris ke-14 adalah, kita mendeklarasikan array dengan variabel namaKelompok dan bertipe-data String dan mempunyai panjang 6, nilai panjang ini tergantung isi array tersebut.
Untuk pengaksesan array kita menggunakan indeks array, jika panjang array bernilai 6, maka indeks array mulai dari 0-5, lalu kita bisa menggunakan looping untuk pengaksesan indeks array ini, tapi pada sharing kali ini gue... makek yang looping for, struktur looping for dimulai pada baris ke-18 sampai 20, sekarang saya akan menjelaskan alur pengaksesan array satu dimensi menggunakan looping for.

Alur pertama :
Deklarasi variabel i dengan tipe data int dan mempunyai nilai 0, 


Alur kedua :
lalu mengecek kondisi terlebih dahulu, apakah i < namaKelompok.length, maksud dari namaKelompok.length adalah mengambil nilai panjang array namaKelompok, karena panjang array bernilai 6 maka namaKelompok bernilai 6, Jadi kondisinya adalah apakah 0 < 6 maka jawabannya benar(true).  
Alur ketiga : 
Lalu, jika kondisi bernilai true maka akan mengeksekusi perintah yang ada didalam struktur looping for, lihat baris ke-19 itu adalah perintah untuk mencetak array dan no urut, ++noUrut  digunakan untuk no urut dan akan di increment sampai nilai kondisi pada looping for salah,  sedangkan namaKelompok[i] digunakan untuk mengakses indeks array ke-i.



Alur keempat :
Jika selesai mengerjakan perintah yang didalam struktur looping, maka akan meng-increment nilai i, dan kembali ke proses kedua, ketiga, keempat, begitu seterusnya, sampai kondisi looping tersebut salah.

Berikut outputnya :