IMPLEMENTASI ALGORITMA BLOWFISH DENGAN KUNCI SIMETRIK



1.        Judul
“IMPLEMENTASI ALGORITMA BLOWFISH DENGAN KUNCI SIMETRIK UNTUK ENKRIPSI DAN DEKRIPSI FILE”

2.        Abstraksi
Proposal ini berisi pembahasan algoritma kunci simetri dengan cipher blok, Blowfish. Blowfish merupakan salah satu algoritma yang dibuat oleh Bruce Schneier pada tahun 1993 sebagai salah satu alternatif untuk algoritma enkripsi. Blowfish termasuk kedalam cipher blok yang masih dianggap aman karena belum ditemukan attack yang benar-benar dapat mematahkannya. Pada Proposal ini juga akan dibahas mengenai implementasi algoritma Blowfish pada sebuah aplikasi yang akan melakukan enkripsi dan dekripsi pada teks. Aplikasi tersebut diharapkan dapat menerapkan algoritma Blowfish secara optimal, oleh karena itu akan dibahas mengenai karakteristik algoritma Blowfish yang dapat membuat algoritma ini berjalan secara optimal. Dengan adanya implementasi itu pula, diharapkan dapat menjadi contoh penggunaan algoritma Blowfish untuk proses enkripsi yang sesungguhnya. Aplikasi yang akan dibuat merupakan aplikasi sederhana yang hanya dapat melakukan enkripsi pada file teks, namun hal tersebut dianggap cukup untuk memberi contoh penggunaan algoritma Blowfish dalam proses enkripsi.
Kata Kunci : Algoritma Kunci Simetrik, Blowfish, Enkripsi, Dekripsi

3.        Latar Belakang
Kriptografi telah menjadi bagian penting dalam dunia teknologi informasi saat ini. Hampir semua penerapan teknologi informasi menggunakan kriptografi sebagai alat untuk menjamin keamanan dan kerahasiaan informasi. Karena itu pulalah, kriptografi menjadi ilmu yang berkembang pesat. Dalam waktu singkat, amat banyak bermunculan algoritma-algoritma baru yang dianggap lebih unggul daripada pendahulunya. Namun, tetap saja cipher yang digunakan tidak lepas dari penemuan lama. Algoritma kunci simetri termasuk algoritma yang masih sering digunakan dalam pembuatan algoritma kriptografi. Pada saat ini, algoritma enkripsi kunci simetri yang banyak digunakan adalah algoritma blok, yang beroperasi pada suatu potongan pesan (blok) yang berukuran sama (biasanya 64 bit) pada  suatu saat.
Selain algoritma blok, ada juga algoritma aliran yang beroperasi pada potongan data yang bervariasi. Dibandingkan dengan cipher aliran, baik dalam desain dan penerapan, cipher blok dianggap lebih rumit.
Pada saat Blowfish dirancang, diharapkan mempunyai kriteria perancangan sebagai berikut :
a.    Cepat, Blowfish melakukan enkripsi data pada  microprocessors 32-bit. dengan rate 26 clock cycles per byte.
b.    Compact, Blowfish dapat dijalankan pada memori kurang dari 5K.
c.    Sederhana, Blowfish hanya menggunakan operasi-operasi Sederhana, Blowfish hanya menggunakan operasi-operasi sederhana: penambahan, XOR, dan lookup tabel pada operan 32-bit.
d.   Memiliki tingkat keamanan yang bervariasi, panjang kunci yang digunakan oleh Blowfish dapat bervariasi dan bisa sampai sepanjang 448 bit [2].
Proposal ini bertujuan dapat mempelajari algoritma Blowfish secara keseluruhan agar dapat memahami cara kerja dan struktur algoritmanya, kemudian menerapkan strategi perancangan Blowfish sehingga algoritma ini dapat berjalan secara optimal. Atau paling tidak dapat melakukan enkripsi dengan baik pada aplikasi yang akan dibuat.
Aplikasi yang akan dibuat diharapkan dapat menggambarkan penggunaan algoritma Blowfish pada proses enkripsi teks sehingga lebih mudah memahami cara kerja dan struktur algoritma Blowfish.

4.        Perumusan Masalah
Permasalahan utama berdasarkan latar belakang adalah :
1.    Bagaimana pengaplikasian enkripsi dan dekripsi algoritma Blowfish
2.    Bagaimana perangkat lunak mengenkripsi dan dekripsi file / folder.

5.        Tujuan
Adapun tujuan berdasarkan rumusan masalah di atas adalah :
  1. Mengetahui enkripsi dan dekripsi algoritma Blowfish
  2. Perangkat lunak mampu mengenkripsi dan dekripsi file / folder.
6.        Batasan Masalah
Pada penyelesaian proyek ini, permasalahan dibatasi hanya untuk enkripsi dan dekripsi file / folder.

7.        Tinjauan Pustaka
Teknik pengamanan data menggunakan enkripsi dan dekripsi dikenal dengan nama kriptografi, sebagai sebuah ilmu atau seni untuk mengamankan pesan atau data dengan cara menyamarkan pesan tersebut sehingga hanya dapat dibaca oleh pengirim dan penerima pesan. Penerapan kriptografi pada komputer dapat menyamarkan pesan yang berupa file teks, gambar, suara, gambar bergerak dan lain-lain.
Secara global teknik enkripsi dan dekripsi data terdiri dari dua metoda, yaitu metoda kunci publik dan metoda kunci simetri. Metoda kunci simetri menggunakan password atau kata kunci yang sama untuk melakukan enkripsi dan juga dekripsi. Karena itu metoda ini sering juga disebut dengan metoda secret key Criptography. Contoh-contoh metoda ini adalah: DES (Data Encryption Standard), IDEA (International Data Encryption Algoritm), RC5, Blowfish, dan FEAL. Cara kerja metoda enkripsi ini terlihat seperti gambar 1.
Gambar 1. Kriptografi kunci simetris

Masalah utama bagi metoda pengamanan data dengan kunci simetris adalah bagaimana mengirimkan kunci simetris tersebut dari pengirim kepada penerima. Tentunya akan metoda pengamanan ini tak akan berguna bila kunci sampai jatuh ke tangan orang yang tidak berhak. Untuk itu dikembangkan metoda kunci asimetris yang dikenal juga kunci publik. Metoda kunci publik ini pertama kali ditemukan oleh Whitfield Diffie dan Martin Hellman, serta Ralph Merkle secara independent. RSA,  El Gamal, dan Rabin adalah contoh-contoh kriptografi kunci simetris. Metoda ini menggunakan kunci yang berbeda untuk enkripsi dan dekripsi. Melalui metoda yang ada maka kunci enkripsi dapat dipublikasikan pada pengirim tanpa khawatir jatuh ke tangan orang yang tidak berhak, karena hanya dapat digunakan untuk mengenkripsi dan tidak bisa digunakan untuk mengdekripsi. Kunci untuk mengenkripsi tersebut kemudian dikenal dengan nama kunci publik sedangkan kunci untuk mendekripsi dikenal dengan nama kunci privat. Cara kerjanya dapat dilihat pada gambar 2, K1 adalah kunci publik sedangkan K2 adalah kunci privat.
Gambar 2. Kriptografi kunci asimetris

Algoritma-algoritma dalam proses enkripsi dan dekripsi sebenarnya terbagi menjadi dua macam, yaitu yang bersifat stream cipher dan block cipher. Stream cipher  mengenkripsi  plaintext atau mendekripsi  ciphertext secara bit per bit, yaitu satu bit dienkripsi atau didekripsi per satuan waktu. Sedangkan algoritma tipe block cipher mengenkripsi plaintext dan mendekripsi ciphertext secara blok per blok (blok adalah kumpulan bit), yaitu satu blok dienkripsi atau didekripsi per satuan waktu. Tentu saja proses enkripsi dan dekripsi menggunakan metoda block cipher memiliki kecepatan yang lebih baik dibandingkan metoda stream cipher [1].

7.1     Algoritma Kunci
Algoritma sandi berdasarkan kesamaan kunci dibagi menjadi dua, yaitu kunci asimetris dan kunci simetris. Pada sistem kunci-asimentris digunakan sepasang kunci yang berbeda, umumnya disebut kunci public (public key) dan kunci pribadi (private key), digunakan untuk proses enkripsi dan proses dekripsinya. Jadi kunci untuk membuat pesan yang   disandikan berbeda dengan kunci untuk membuka pesan yang   disandikan itu. Beberapa contoh algoritma yang menggunakan kunci-asimetris : Knapsack,   RSA (Rivert-Shamir-Adelman), Diffie-Hellman.
Sedangkan pada skema kunci-simetris, digunakan sebuah kunci rahasia yang sama untuk melakukan proses enkripsi dan dekripsinya. Algoritma sandi  kunci  simetris adalah  jenis kriptografi yang paling umum dipergunakan. Kunci   untuk   membuat   pesan   yang   disandikan   sama dengan kunci untuk membuka pesan yang disandikan itu. Siapapun yang memiliki  kunci tersebut, dapat membuat dan membongkar rahasia ciphertext. Problem yang paling jelas disini terkadang bukanlah masalah   pengiriman ciphertext-nya, melainkan masalah bagaimana menyampaikan kunci simetris tersebut kepada pihak yang diinginkan.  Beberapa contoh algoritma yang menggunakan kunci-simetris : DES   (Data Encryption Standard),  Blowfish, Twofish, MARS, IDES, 3DES - DES   diaplikasikan 3 kali, AES (Advanced Encryption Standard).
Gambar 3. Kriptografi kunci simetris

Sebuah   skema   algoritma   sandi   akan   disebut   kunci-simetris   apabila   untuk   setiap proses   enkripsi   maupun dekripsi  data   secara   keseluruhan digunakan kunci  yang sama. Skema ini berdasarkan jumlah data per proses dan alur pengolahan data didalamnya dibedakan menjadi dua kelas, yaitu stream-cipher dan block-cipher.
Stream-cipher merupakan sebuah algoritma sandi yang mengenkripsi  data persatuan data,  seperti  bit,  byte,  nible atau per  lima bit (saat  data yang di enkripsi  berupa data Boudout).   Setiap   mengenkripsi   satu   satuan   data di gunakan kunci  yang merupakan hasil  pembangkitan dari kunci sebelum. Block-cipher  adalah skema algoritma sandi  yang akan membagi-bagi teks  terang yang akan dikirimkan dengan ukuran tertentu (disebut blok) dengan panjang t, dan setiap blok dienkripsi dengan menggunakan kunci yang sama.
Semenjak pertama kali ditemukan, telah banyak penemuan-penemuan baru dalam penerapan  cipher  blok. Salah satunya adalah algoritma Blowfish yang dirancang oleh Bruce Schneier pada tahun 1993. Sejak saat itu, telah dilakukan   berbagai  macam  analisis,   dan   perlahan-lahan mulai  mendapat   penerimaan   sebagai   algoritma   enkripsi yang kuat [2].
           
Algoritma Kunci Simetrik
Algoritma kunci simetrik adalah algoritma kriptografi yang memiliki kunci yang sama untuk proses enkripsi dan dekripsinya. Kunci tersebut merupakan satu-satunya jalan untuk proses dekripsi (kecuali mencoba membobol algoritma tersebut), sehingga kerahasiaan kunci menjadi nomor satu. Untuk mengirimkan kunci tersebut ke suatu pihak tanpa diketahui pihak yang lain merupakan masalah awal dari algoritma kunci simetrik. Algoritma kunci simetrik terbagi menjadi dua buah bergantung pada datanya. Keduanya adalah: cipher aliran (stream cipher) dan cipher blok (block cipher). Cipher aliran  memproses satu bit pesan sekali dalam satu waktu, sedangkan cipher blok memproses sekumpulan bit sekaligus sebagai satu unit. Ukuran blok yang umu dipakai adalah 64 bit.
Algoritma kunci simetrik terbagi menjadi dua buah bergantung pada datanya. Keduanya adalah: cipher aliran (stream cipher) dan
cipher blok (block cipher) [3].

Deskripsi cipher blok
Cipher blok merupakan salah satu pendekatan dalam algoritma kriptografi kunci simetrik. Pendekatan lain adalah cipher aliran. Perbedaan mendasar keduanya adalah jika cipher blok memproses dalam suatu kumpulan bit sekaligus sebagai suatu unit dan cipher aliran memproses bit per bit. Panjang blok yang biasa diimplementasikan oleh perancang algoritma kriptografi adalah kelipatan 64 bit. Pada awal tahun 1990-an, panjang blok yang paling umum adalah 64 bit. Masayrakat merasa dengan panjang kunci 64 bit telah cukup aman dan tidak mungkin ada komputer yang mampu menyerang dengan metode brute force. Namun dengan berlalunya waktu, ternyata mungkin untuk menyerang algoritma dengan kunci 64 bit menggunakan metode brute force. Oleh karena itu panjang blok umum berkembang menjadi 128 bit pada awal 2000-an, atau bahkan akhir-akhir ini [3].

7.2     Algoritma Blowfish
Blowfish atau yang disebut   juga “OpenPGP.Cipher.4″ adalah algoritma kunci   simetrik   cipher   blok   yang dirancang   pada   tahun 1993 oleh Bruce Schneider untuk menggantikan DES  (Data Encryption   Standard). Algoritma Blowfish dibuat untuk digunakan pada komputer   yang mempunyai microposesor besar (32-bit keatas dengan cache data yang besar).
Pada saat itu banyak sekali rancangan algoritma yang ditawarkan,   namun hampir semua terhalang oleh paten atau kerahasiaan pemerintah Amerika. Schneier menyatakan bahwa blowfish bebas paten dan akan berada  pada domain publik. Dengan pernyataan Schneier tersebut blowfish  telah mendapatkan  tempat  di  dunia kriptografi, khususnya bagi masyarakat yang membutuhkan algoritma kriptografi yang cepat, kuat, dan tidak   terhalang oleh lisensi.
Blowfish dirancang dan diharapkan mempunyai kriteria perancangan yang diiginkan sebagai berikut :
a.    Cepat,  Blowfish melakukan enkripsi data pada microprocessor 32-bit dengan rate 26 clock cycles per byte.
b.    Compact,Blowfish dapat dijalankan pada memory kurang dari 5K.
c.    Sederhana, Blowfish hanya menggunakan operasi – operasi operasi   sederhana, seperti : penambahan, XOR, dan lookup tabel pada operan32-bit.
d.   Memiliki tingkat keamanan yang bervariasi, panjang kunci yang digunakan oleh Blowfish dapat bervariasi dan bisa sampai sepanjang minimal 32-bit, maksimal 448 -bit, Multiple 8 bit, default 128 bit [2].

7.2.1    Struktur Algoritma Blowfish
Blowfish merupakan blok cipher 64-bit dengan panjang kunci variabel.  Algoritma ini terdiri dari dua bagian: key expansion atau perluasan kunci dan enkripsi data.
7.2.1.1   Key-Expansion
Berfungsi merubah kunci (Minimum 32-bit, Maksimum 448-bit) menjadi beberapa array subkunci (subkey) dengan total 4168 byte.
7.2.1.2   Enkripsi Data
Terdiri  dari   iterasi   fungsi  sederhana  (Feistel  Network) sebanyak   16   kali   putaran.   Setiap   putaran   terdiri dari permutasi kunci-dependent dan substitusi kunci- dan data-dependent. Semua operasi adalah penambahan (addition) dan XOR pada variabel 32-bit. Operasi tambahan lainnya hanyalah empat penelusuran tabel (table lookup) array berindeks untuk setiap putaran.
Untuk alur algoritma enkripsi dengan metoda Blowfish dijelaskan sebagai berikut :
1.      Bentuk inisial array P sebanyak 18 buah (P1,P2,…………..P1  masing-msing bernilai 32-bit.
Array   P   terdiri   dari   delapan   belas   kunci   32-bit subkunci :
P1,P2,…….,P18
2.      Bentuk S-box  sebanyak  4 buah masing-masing bernilai 32-bit yang memiliki masukan 256.
Empat 32-bit S-box masing-masing mempunyai 256 entri:
S1,0,S1,1,………………..,S1,255
S2,0,S2,1,………………..,S2,255
S3,0,S3,1,………………..,S3,255
S4,0,S4,1,………………..,S4,255
3.      Plainteks yang akan dienkripsi diasumsikan sebagai masukan, Plainteks tersebut diambil sebanyak 64-bit,   dan   apabila   kurang   dari   64-bit  maka   kita tambahkan bitnya, supaya dalam operasi nanti sesuai dengan datanya.
4.      Hasil pengambilan  tadi  dibagi  2,  32-bit pertama disebut XL, 32-bit yang kedua disebut XR.
5.      Selanjutnya lakukan operasi
XL = XL xor Pi dan XR = F(XL) xor XR
6.      Hasil dari operrasi diatas ditukar XL menjadi XR dan XR menjadi XL.
7.      Lakukan sebanyak 16 kali,  perulangan yang ke-16 lakukan lagi proses penukaran XL dan XR.
8.      Pada proses ke-17 lakukan operasi untuk
XR = XR xor P17 dan XL = XL xor P18.
9.      Proses   terakhir   satukan   kembali  XL   dan  XR sehingga menjadi 64-bit kembali.

Blowfish  menggunakan   jaringan   Feistel   yang   terdiri dari 16 buah putaran. Skema jaringan Feistel dapat dilihat di gambar 4.
Gambar 4. Jaringan Feistel untuk Algoritma Blowfish

Algoritma Blowfish memiliki keunikan dalam hal proses dekripsi, yaitu proses dekripsi dilakukan dengan urutan yang sama persis  dengan proses enkripsi,  hanya saja pada proses dekripsi P1, P2, …, P18 digunakan dalam urutan yang terbalik.
Dalam  algoritma   Blowfish   juga   terdapat   fungsi   f. Berikut ini gambar mengenai fungsi f tersebut.
Gambar 5. Fungsi f dalam algoritma Blowfish

Sebelumnya   dijelaskan   bahwa   Array   P   terdiri   dari delapan belas subkunci. Subkunci dihitung menggunakan algoritma Blowfish, metodenya adalah sebagai berikut :
1.      Pertama-tama inilialisasi P-array dan kemudian empat S-box secara berurutan dengan string yang tetap. String ini terdiri atas digit hexadesimal dari Pi.
2.      XOR P1 dengan 32-bit pertama kunci, XOR P2 dengan 32-bit kedua dari kunci dan seterusnya untuk setiap bit dari kunci (sampai P18). Ulangi terhadap bit kunci sampai seluruh P-array di XOR dengan bit kunci.
3.      Enkrip semua string nol dengan algoritma Blowfish dengan menggunakan subkunci seperti dijelaskan pada langkah (1) dan (2).
4.      Ganti P1 dan P2 dengan keluaran dari langkah (3).
5.      Enkrip keluaran dari langkah (3) dengan algoritma Blowfish dengan subkunci yang sudah dimodifikasi.
6.      Ganti P3 dan P4 dengan keluaran dari langkah (5).
7.      Lanjutkan proses tersebut, ganti seluruh elemen dari P-array, kemudian seluruh keempat S-box berurutan, dengan keluaran yang berubah secara kontiyu dari algoritma Blowfish.

Secara keseluruhan terdapat 521 iterasi atau   putaran yang dibutuhkan untuk membangkitkan seluruh upa-kunci yang dibutuhkan.  Aplikasi   kemudian   dapat  menyimpan upa-kunci   yang   telah   dihasilkan.   Proses  pembangkitan kunci ini tidak perlu selalu dilakukan setiap saat [2].

7.2.2    Keamanan Algoritma Blowfish
Sampai   saat   ini   algoritma  Blowfish belum ditemukan kelemahan yang berarti  hanya  adanya  weak key  dimana dua entri dari S-box mempunyai  nilai yang sama. Belum ada cara untuk mengecek  weak key  sebelum melakukan key expansion,   tetapi  hal   ini   tidak berpengaruh  terhadap hasil enkripsi.
Hasil  enkripsi  dengan algoritma Blowfish sangat   tidak mungkin   dan   tidak   praktis   untuk   di   terjemahkan   tanpa bantuan kunci. Sampai kini belum ada Cryptoanalyst yang dapat  membongkar   pesan   tanpa   kunci   yang   dienkripsi dengan memakai bantuan algoritma Blowfish. Agar aman dari pembongkaran pesan maka dalam algoritmanya harus menggunakan 16 putaran agar pesan tersebut tidak dapat dibongkar.
Algoritma   Blowfish   pun   dapat   digabungkan   dengan algoritma-algoritma enkripsi yang lain dalam pengkripsian sebuah pesan untuk lebih menjamin isi dari pesan tersebut. Sehingga   algoritma   Blowfish   cukup   aman   jika   ingin digunakan   untuk   mengenkripsi   data   yang   ingin   di amankan [1].

7.2.3    Penggunaan Algoritma Blowfish
Blowfish adalah salah satu algoritma cipher blok yang tercepat dan digunakan secara luas di dunia, kecuali ketika pergantian   kunci.   Setiap   kunci   baru   memerlukan pemrosesan   awal   yang   sebanding   dengan mengenkripsikan   teks   denga   ukuran   sekitar   4   kilobyte.
Pemrosesan awal ini sangat  lambat dibandingkan dengan algoritma   cipher  blok  lainnya.   Hal   ini   menyebabkan Blowfish   tidak   mungkin   digunakan   dalam   beberapa aplikasi, tetapi tidak menimbulkan masalah dalam banyak aplikasi lainnya.Pemrosesan awal  yang  lama pada Blowfish digunakan sebagai   ide   untuk   metode  password-hashing  yang digunakan pada OpenBSD. Metode password-hashing ini menggunakan algoritma  yang diuturnnkan dari algoritma Blowfish   yang  menggunakan  penjadwalan   kunci  yang lambat.  Algoritma   ini   digunakan   dengan   pertimbangan bahwa usaha komputasi ekstra yang harus dilakukan dapat memberikan   proteksi   lebih   terhadap   serangan   terhadap password berbasiskan kamus (dictionary attacks).
Dalam  beberapa   implementasi,  Blowfish  memerlukan memori yang relatif besar, yaitu sekitar 4 kilobyte. Hal ini tidak  menjadi  masalah  bahkan untuk komputer  desktop dan  laptop yang sudah berumur tua. Tetapi hal ini juga membuat   implementasi  Blowfish pada embedded system terkecil   (seperti   pada   smartcard   pada   awal kemunculannya) tidak mungkin untuk dilakukan [2].

Enkripsi Blowfish
Blowfish membutuhkan 64 bit blok-blok plaintext sebagai masukannya dan menghasilkan 64 bit chipertext. Ukuran kunci untuk Blowfish dapat dipilih dalam range 32 bit sampai 448 bit yang mana semakin besar ukurannya maka semakin kuat keamanannya. Blok masukan dipecah dalam paro L0 dan R0 dimana tiap-tiap paro tersebut mengandung 32 bit. Blowfish dapat secara sederhananya digambarkan dengan algoritma berikut [4]:
j = 1
loop from j to 16
     Rj = Lj-1 XoR Pj
Lj = F (Rj) XoR Rj-1
end loop
L17 = R16 XoR P18
R17 = L16 XoR P17



Dekripsi Blowfish
Dekripsi untuk Blowfish bersifat maju kedepan. Ironisnya, dekripsi bekerja dalam arah algoritma yang sama seperti halnya dengan enkripsi, namun sebagai masukannya dalah chipertext. Walaupun begitu, seperti yang diharapkan, sub-kunci yang digunakan dalam urutan terbalik. Sehingga algoritma dekripsi Blowfish sebagai berikut [4]:
j = 1
loop from j to 16
Rj = Lj-1 XoR P19-j
Lj = F (Rj) XoR Rj-1
end loop
L17 = R16 XoR P1
R17 = L16 XoR P2

8.        Daftar Pustaka
[1]   Tjiharjadi, Semuil., Chandra Wijaya, Marvin. “Pengamanan Data Menggunakan Metoda Enkripsi Simetri Dengan Algoritma Feal”. SNATI 20, 1-2:1907-5022. 2009.

[2]   Alim Sutanto, Candra. “Penggunaan Algoritma Blowfish Dalam Kriptografi”, <http://webmail.informatika.org/~rinaldi/Matdis/2009-2010/Makalah0910/MakalahStrukdis0910-070.pdf>. Diakses 11 November 2010.

[3]   Octamanullah, Mohamad. “Perbandingan Algoritma Kriptografi Kunci Simetrik BlowFish dan TwoFish”

[4]   Riza Putra, Muhammad. “studi dan implementasi the blowfish encryption algorithm dalam bahasa pemrograman c++”. <http://www.informatika.org/~rinaldi/Matdis/2006-2007/Makalah/Makalah0607-30.pdf> Diakses 9 November 2010


5 comments:

  1. boleh ijin copy ya pak :), terimakasih ya

    ReplyDelete
  2. cara cakaran matematik untuk enkripsi SMS dengan algoritma blowfish

    ReplyDelete
  3. Cara mencari s-boxnya bagaimana ya??

    ReplyDelete
  4. Maksud dari no.3 yang enkrip string 0 itu maksudnya gimana ya?? Terima kasih

    ReplyDelete
  5. saya boleh minta source codenya gak? untuk tugas kuliah saya terimakasih

    ReplyDelete