Dasar-Dasar Kriptografi dan Implementasinya Dengan Borland Delphi 7 – Dasar-Dasar Cryptography dan Implementasinya
Dokumen
ini dibuat dengan tujuan untuk memasyarakatkan kriptografi dan
meng-kriptografikan masyarakat. Karena, masih banyak kawan-kawan yang
menganggap kriptografi sebagai ilmu yang sangat tinggi dan sulit
dipelajari, bahkan ada yang mengkategorikan ilmu ini sebagai ilmu gaib.
Saya tidak akan bilang bahwa ilmu ini mudah, dan dapat dipelajari hanya
dalam waktu semalam. Tidak kawan, semua ilmu yang bagus butuh proses.
Dokumen ini tidak dibuat untuk menjadi referensi utama untuk kriptografi. Karena, kriptografi terlalu luas untuk dibukukan dalam satu buku setebal novel Lord of The Ring, apalagi dalam satu dokumen facebook seperti ini!
Lebih tepat jika dokumen ini dijadikan sebagai “penunjuk jalan” ke
dunia kriptografi yang menarik dan menyenangkan dengan kemungkinan
eksploitasi tanpa batas. Untuk kawan-kawan yang sudah lebih tinggi ilmu
dan pengalamannya di bidang ini, dengan segala kerendahan hati, saya
mohon izin dan maklum atas kesalahan yang mungkin ada di dokumen ini.
Tujuan
awal dari kriptografi adalah menyembunyikan isi pesan sehingga tidak
dapat terbaca oleh pihak-pihak yang tak diinginkan, tetapi masih dapat
dimengerti oleh pihak yang dituju. Seiring perkembangan jaman,
kriptografi banyak diterapkan di berbagai bidang, mulai dari tukar
menukar informasi di perang dunia kedua, hingga dunia komputerisasi yang
kita alami saat ini.
Dokumen ini, tentu saja, tidak akan membahas
bagaimana pasukan Nazi mengoperasikan “Enigma”, sehingga membingungkan
pihak sekutu. Dokumen ini “hanya” akan membahas kriptografi dan
implementasinya di bidang IT. Implementasi yang akan ditunjukkan juga
hanya implementasi dasar dan bersifat “offline”, bukan implementasi
canggih seperti “email transaction”, “pay pal autorization”, “handshake
cryptographic”, dll. Tapi, percayalah kawan, semua implementasi canggih
itu, berdasar dari implementasi dasar ini.
Dalam dokumen ini akan
dipakai istilah yang umum dipakai dalam dokumen-dokumen kriptografi.
Contohnya adalah “plain text”, yaitu pesan asli yang hendak disampaikan.
“Cipher text“, yang artinya pesan yang telah di-enskripsi. Dan istilah-istilah lainnya yang mungkin membingungkan, maaf bila itu terjadi.
Sesuai
judulnya, dokumen ini menggunakan Borland Delphi 7 sebagai compiler
kode-kode yang digunakan. Kenapa? Yap, karena saya memang paling nyaman
menggunakan Delphi dengan versi tersebut untuk hal-hal yang berbau
kriptografi. Anda bisa memilih menggunakan compiler lain yang paling
anda sukai. Untuk library yang dijadikan referensi kriptografi, saya
selalu mempercayakan kepada bang Barton, di situs : http://www.cityinthesky.co.uk/opensource/dcpcrypt.
Selain open source, alasan saya menggunakan library tersebut adalah
kelengkapan dari metode kriptografi yang digunakan. Namun lagi-lagi, ini
tidak mengikat. Anda bebas menggunakan library manapun yang paling
cocok dengan anda, atau bila anda sudah cukup memahami alur dari
algoritma suatu metoda, anda bisa menulis library sendiri.
File-file
implementasi yang disertakan dalam dokumen ini merupakan source yang
siap di-compile. Bagi kawan-kawan yang memiliki Borland Delphi 7
terinstall di komputernya, bisa langsung meng-klik file dengan ekstensi
“dpr”. Bagi yang tidak menginstall compiler tersebut, untuk mengetahui
isi kode program, bisa membuka file dengan ekstensi “pas” dengan notepad
atau text editor lainnya. File “exe” juga disertakan untuk melihat
implementasinya secara langsung.
Dari output yang dihasilkan,
kriptografi dapat dibagi menjadi dua, yaitu kriptografi “satu-arah” dan
“dua arah”. Dan dalam kriptografi “dua-arah” pun, bila dilihat dari
jenis “key” yang digunakan, dapat dibagi menjadi dua, yaitu “symetric
key” dan “asymetric key”. Begitulah kira-kira kerangka dari dokumen ini.
Walaupun terbagi-bagi seperti itu, tidak menutup kemungkinan semua
jenis kriptografi tersebut di implementasikan bersama-sama, atau yang
lebih dikenal dengan metode “hybrid”. Pada akhir dokumen, akan
diperlihatkan implementasi dari metode hybrid ini.
Dalam implementasinya di dunia IT,
plain text yang diinput ke dalam kriptografi, bentuknya bisa
bermacam-macam. Bisa file exe, dokumen, gambar, musik, dan semua file
digital lainnya. Tergantung dari sang pengguna yang
meng-implementasikannya. Inilah mengapa kemungkinan dalam kriptografi
menjadi tak terbatas dan sangat menarik!
////////////////////////////////////
Kriptografi Satu Arah
////////////////////////////////////
Sesuai
namanya, kriptografi ini hanya bisa berjalan satu arah. Atau dengan
kata lain, hanya bisa merubah plain text menjadi cipher text, tapi tidak
bisa mengembalikan cipher text menjadi plain text. Kriptografi jenis
ini sering disebut sebagai “hash”. Ciri khusus hash ini adalah, chiper
text yang dihasilkan berbeda-beda (unik) untuk setiap plain text yang di
input. Karena ciri khusus ini, hash sering kali dimanfaatkan sebagai
“sidik jari” suatu file atau dokumen.
Metode hash yang umum
digunakan adalah MD5, SHA1, RipeMD128. Sebenarnya masih banyak metode
lainnya, tapi dalam implementasi yang akan disajikan, metode hash yang
digunakan adalah ketiga metode tersebut. Implementasi bisa di download
di :
http://www.mediafire.com/?4yz9vj0v8sbydf3
Dengan
mengeksekusi file “exe” dari implementasi tersebut, dapat kita lihat
bahwa tools ini mampu menghitung hash dari plain text dengan jenis text
maupun file. Tapi, jangan coba-coba menghitung hash dari file yang
berukuran >= 10 MB dengan tools ini, kecuali jika prosessor anda
cukup mumpuni. Karena memang, implementasi ini dirancang dengan tidak
memperhatikan optimasi pembacaan file. Silahkan anda optimasi sesuka
anda.
Dalam
implementasi tersebut, kode utama terletak pada file “Unit1.pas”. File
“DCPmd5.pas”, “DCPsha1.pas”, dan “DCPripemd128.pas” merupakan library
dari metode yang bersangkutan yang disediakan oleh DCPCrypt. Sedangkan,
file “DCPcrypt2.pas”, “DCPconst.pas”, “DCPblockciphers.pas”, dan
“DCPbase64.pas” merupakan file yang “diwajibkan” oleh
DCPCrypt
untuk ditaruh di folder yang sama dengan kode utama. Atau bila anda
sudah menginstall Borland Delphi 7, anda bisa melihat itu semua dengan
membuka file “Project1.dpr”. File yang lain bisa diabaikan, karena
merupakan hasil “generate” dari compiler.
Oke, kita coba bedah
“source code” dari tool ini untuk memperjelas implementasi kriptografi
satu arah atau “hash” ini. Mari kita lihat pada kode utama di baris 42
sampai baris 100. Di situ dapat kita lihat tiga fungsi untuk menghitung
masing-masing metode hash. Fungsi-fungsi ini dibuat sendiri oleh saya
dengan berpedoman pada petunjuk pemakaian yang dianjurkan oleh DCPCrypt,
yang artinya fungsi ini tidak “baku”, dan ya, anda bisa membuat versi
yang berbeda sesuai dengan kebutuhan dari implementasi yang anda
inginkan.
Dari ketiga fungsi tersebut, dapat kita lihat bahwa
fungsi tersebut membutuhkan 1 parameter yang memiliki tipe String, dan
akan mengembalikan String juga. Hal ini saya lakukan dengan pertimbangan
untuk mempertahankan format awal kriptografi, dari Plain Text berbentuk
string menjadi Cipher Text berbentuk string juga. Tapi sekali lagi, ini
tidak baku, anda bisa mengganti parameter input menjadi tipe array dari
byte misalnya, untuk membaca stream.
Lalu di baris 122 sampai
baris 171 pada kode utama, dapat kita lihat proses perhitungan hash
dilakukan pada saat user meng-klik tombol “Hash It”. Dapat kita lihat,
jika user memilih untuk menggunakan mode “Text”, maka kodenya cukup
simpel, hanya meng-assign variable “strPlain”
dengan apa yang di-input oleh user. Yang sedikit “tricky” adalah jika
user memilih mode “File”, atau menghitung hash dari File yang dipilih.
Berbagai macam pendekatan bisa dilakukan di sini. Mengingat ketiga
fungsi untuk menghitung hash tadi membutuhkan Plain Text dengan bentuk
string, maka pendekatan yang saya pilih adalah merubah semua “isi” file
ke dalam bentuk string, lalu meng-assign string tersebut ke dalam
strPlain. Setelah variable strPlain siap, kita masukkan variable
tersebut sebagai parameter di fungsi untuk menghitung hash dengan metode
yang dipilih user.
Demikianlah salah satu contoh implementasi
kriptografi satu arah. Implementasi ini bisa dimanfaatkan untuk mengecek
ke-aslian suatu file, karena bila suatu file sudah di modifikasi, maka
nilai hash akan berubah. Bila anda tertarik untuk melihat detail dari
algoritma dari setiap metode, anda bisa melihatnya pada file “pas” yang
bersangkutan. Atau saran saya, coba debug program tersebut, agar anda
dapat “merasakan” bagaimana algoritmanya mengalir.
////////////////////////////////////
Kriptografi Dua Arah
////////////////////////////////////
Kriptografi
jenis ini mungkin sering direferensikan sebagai kriptografi yang
“sesungguhnya”, karena memiliki metode “encrypt” untuk merubah plain
text menjadi cipher text, dan metode “decrypt” untuk mengembalikan
cipher text menjadi plain text. Dalam kriptografi jenis ini, selain
plain text dan cipher text, dibutuhkan parameter lainnya yang disebut
“key”. Saat ini dikenal dua jenis key yang digunakan, yaitu “Symmetric
Key” dan “Assymetric Key”.
Yang perlu diingat dalam proses
kriptografi dua arah ini adalah, proses encrypt dan decrypt harus
memiliki operasi yang saling bertolak belakang. Misal, pada proses
encrypt kita menggunakan operator “+” (tambah), maka pada proses decrypt
kita harus menggunakan operator “-“ (kurang). Karena itu, dalam
implementasi kriptografinya proses encrypt dan decrypt dibuat menjadi
dua implementasi yang berbeda, namun saling melengkapi. Untuk proses
decrypt, implementasi akan meniru proses verifikasi serial sebuah
software, sedangkan untuk proses encrypt, implementasi akan bertindak
sebagai “keygen”-nya.
————————
Symmetric Key
————————
Yang
dimaksud dengan symmetric key atau key yang simetris adalah, parameter
key yang digunakan dalam proses encrypt dan decrypt, sama. Panjang dari
parameter key ini pun bervariasi tergantung dari metoda yang digunakan.
Dalam implementasi yang akan diberikan, metoda yang digunakan adalah RC4
dan Blowfish, dengan panjang key 128 bit atau 16 byte.
Dengan
alasan tertentu, implementasi akan diberikan dan dibahas dimulai dari
proses decrypt terlebih dahulu. Implementasi decrypt dapat di download
pada:
http://www.mediafire.com/?iefq1v1pzvqbt9l
Sekali
lagi, implementasi ini meniru verifikasi serial sebuah software, tetapi
tentu saja, dibuat se-sederhana mungkin, agar proses kriptografinya
lebih menonjol. Jadi, implementasi ini bersifat sebagai “penerima”
pesan, kemudian mencoba men-decrypt pesan tersebut dan mem-verikasikan
apakah pesan tersebut berasal dari “pengirim” pesan yang sah atau tidak.
File-file
yang terdapat dalam implementasi ini, tidak jauh berbeda dengan yang
berada pada implementasi kriptografi satu arah, hanya library metoda
yang bersangkutan yang berubah. Kode utama, lagi-lagi terletak di
“Unit1.pas”. Mari kita buka kode tersebut untuk mulai membedah
implementasi ini.
Baris 33 sampai dengan 87, menunjukkan dua
fungsi untuk men-decrypt dengan masing-masing metoda. Proses decrypt
kedua metoda dibuat seragam dengan tujuan menghindari kebingungan, dan
yang pasti bukan bentuk baku. Yang berbeda tentu saja algorithma inti
masing-masing metoda yang terdapat di file *.pas masing-masing.
Dikarenakan penyeragaman ini, pembahasan satu metoda bisa mewakili
metoda yang satunya.
Pada baris 35 dapat kita lihat, inisialisasi
konstanta key yang disiapkan untuk proses decrypt. Key dibuat dengan
format array dari byte dengan lebar 16. Atau, dengan kata lain, key
memiliki panjang 16 byte, atau 128 (16*8) bit. Yang perlu dicatat
adalah, bahwa dalam Delphi, notasi “$” menunjukkan bahwa angka yang
ditulis dalam bentuk hexadecimal. Jadi, pendeklarasian array tersebut
bisa saja ditulis seperti ini :
key : array[0..15] of byte = (71,114,105,110,100,83,116,111,110,101,73,115,71,111,111,100);
Pendeklarasian
array diatas menggunakan notasi desimal, dengan nilai yang sama. Lalu,
mengapa dalam implementasi ditulis dengan notasi hexadecimal? I just
love hex, nothing more.
Oke,
mari kita lihat di baris 39 dan 40. Di situ dideklarasikan dua variable
array untuk menampung input dan output dari proses decrypt ini. Karena
yang dilakukan saat ini adalah proses decrypt, maka input adalah Cipher
Text yang ditampung pada variable arrCipher, sedangkan output adalah
Plain Text yang ditampung pada variable arrPlain. Kedua variable
tersebut dibuat dengan panjang yang sama yaitu 8 byte. Hal ini perlu
dicatat, karena akan berpengaruh pada penggunaan fungsi ini, kita akan
sampai ke sana nanti.
Fungsi decrypt ini menerima parameter dalam
bentuk String sebagai input, seperti yang terlihat pada baris 33,
sedangkan variable yang di-input ke proses decrypt inti berbentuk array
dari byte, seperti yang terlihat pada baris 51. Maka, baris 44 sampai
48, bertugas untuk meng-convert variable String menjadi array of byte.
Ada banyak metode yang bisa digunakan untuk tugas ini, seperti misalnya
mengambil nilai ASCII dari masing-masing karakter di dalam string, lalu
menyimpannya ke dalam array of byte. Tetapi, dalam implementasi ini,
metode yang akan digunakan adalah, mengambil setiap 2 (dua) karakter
dari string, lalu ditambahkan notasi “$” di depannya untuk kemudian di
rubah kedalam bentuk byte (integer) dan disimpan ke dalam array. Dan hal
ini dilakukan dengan loop sebanyak 8 (0-7)putaran, karena panjang
variable penampung yang ada (arrCipher)
adalah 8. Karena itu, panjang String yang valid untuk di-input ke dalam
fungsi ini adalah 16 (8*2) karakter, dan karakter yang ada haruslah
karakter bilangan hexadecimal, yaitu 1-9 dan A-F. Mari kita ambil contoh
untuk memperjelas :
Misalkan, string yang di-input adalah :
“1234567890ABCDEF”
Maka array of byte yang terbentuk adalah :
($12, $34, $56, $78, $90, $AB, $CD, $EF)
atau dalam bentuk desimal adalah :
(18, 52, 86, 120, 144, 171, 205, 239)
Semoga contoh di atas cukup jelas untuk menggambarkan “aliran” algo konversi tersebut.
Baris
49 sampai 52 merupakan kode untuk melakukan proses inti decrypt yang
diwajibkan oleh library DCPCrypt ini. Dan hasil dari proses decrypt inti
ini ditampung di variable arrPlain yang berbentuk array of byte. Baris
53 mempersiapkan (mengosongkan) variable strResult yang akan menampung
hasil dari fungsi decrpyt ini. Jika pada input tadi kita meng-convert
dari variable String ke array of byte, sekarang untuk output kita
lakukan kebalikannya, merubah variable array of byte ke String. Dan
itulah yang dilakukan pada baris 54 sampai 57.
Metode yang
digunakan sekarang adalah mengambil setiap byte dari array, lalu
men-subtitusikannya dengan karakter yang memiliki nilai ASCII yang
bersangkutan, untuk kemudian ditambahkan di variable strResult. Metode
ini lebih simpel dari metode sebelumnya, tetapi mari kita ambil contoh
untuk lebih memperjelas :
Misalkan, dalam variable arrPlain adalah :
(71, 119, 84, 97, 109, 112, 97, 110)
maka dalam variable strResult akan terbentuk :
“GwTampan”
Semoga contoh di atas bisa memperjelas apa yang sebenarnya sudah cukup jelas. ;D
Demikianlah
penjelasan tentang fungsi yang digunakan untuk melakukan decrypt.
Fungsi tersebut perlu dipahami sepenuhnya jika kita ingin membuat proses
encrypt yang diperlukan untuk membuat keygen dari “software” verifikasi
ini. Kita akan bahas hal tersebut dalam implementasi berikutnya. Untuk
saat ini, mari kita masuk pada fungsi inti dari program ini, yang
dieksekusi pada saat user menekan tombol “Check”.
Fungsi tersebut,
tentu saja, terletak pada baris 89 sampai 144. Terlihat banyak
percabangan “if” di sana, yang mungkin membingungkan sebagian orang.
Bila itu yang terjadi, dengan segala kerendahan hati, saya mohon maaf
atas buruknya cara pemogramman saya. Tapi saya rasa,
percabangan-percabangan ini tidak perlu dibahas semua, karena hanya
untuk mengecek kesalahan-kesalahan dasar input dari user. Yang patut
dibahas adalah percabangan pada baris 113. Disitu terlihat bahwa jika
“Nama” yang diinput user lebih dari 8 karakter, maka yang diambil
hanyalah 8 karakter pertama saja. Dan jika “Nama” yang diinput kurang
dari 8 karakter, maka variable tersebut digandakan terus-menerus sampai
lebih dari 8, untuk kemudian diambil 8 karakter pertamanya. Lagi-lagi,
contoh untuk memperjelas :
Misalkan, nama yang diinput adalah :
“CryptographyIsSuperFun”
maka, yang diambil hanyalah :
“Cryptogr”
Dan, jika nama yang diinput adalah :
“FUN”
maka, hasilnya akan menjadi :
“FUNFUNFU”
Dengan
ini, kita “memaksa” variable strName untuk tetap memiliki panjang 8
karakter, tidak peduli berapa karakter yang diinput oleh user. Kenapa?
Sebelum dijawab, saya harap anda masih ingat karakteristik dari fungsi
decrypt di atas tadi, input yang valid haruslah string dengan 16
karakter (ini menjelaskan percabangan pada baris 107), dan ouput yang
dihasilkan adalah string dengan 8 karakter. Dan pada baris 133, terdapat
“final check” yang membandingkan variable strName dengan strPlain yang
merupakan hasil Decrypt dari Serial yang diinput. Otomatis, strPlain
akan selalu memiliki panjang 8 karakter, karena itulah kita perlu
“memaksa” strName untuk tetap memiliki panjang 8 karakter.
Sebenarnya
ada sedikit “bug” yang cukup mengganggu pada implementasi ini. Yaitu,
bila kita memasukkan serial dengan panjang 16 karakter, tapi karakter
yang diinput bukanlah karakter hexadecimal, maka akan muncul pesan error
yang kurang bagus.
Tapi tentu saja, hal tersebut bisa diatasi dengan menambahkan
percabangan yang mengecek apakah serial yang diinput merupakan karakter
hexadecimal atau bukan. Anda bisa menambahkannya bila anda mau!
Yap,
demikianlah salah satu contoh implementasi proses decrypt yang meniru
proses verifikasi serial sebuah software. Untuk melengkapinya, yang
tersisa adalah proses encrypt yang akan diterapkan pada keygen untuk
verifikasi ini.
Oke, implementasi untuk proses encrypt bisa di download pada :
http://www.mediafire.com/?coc0u4o61wc6jb2
Dalam
implementasi ini, jika kita mengeksekusi file “exe”, maka kita bisa
meng-generate serial yang valid untuk implementasi verifikasi
sebelumnya. Karena memang, implementasi ini bertindak sebagai keygen
atau dengan kata lain sebagai “pengirim” pesan. Sedangkan implementasi
sebelumnya bertindak sebagai “penerima” pesan.
File-file yang ada
dalam implementasi ini sama dengan yang ada di implementasi verifikasi,
hanya file “exe” dan “Unit1.pas” yang berbeda, karena implementasi ini
menggunakan library dari metoda yang sama dengan implementasi
verifikasi. Mari kita buka kode utama implementasi ini di dalam
“Unit1.pas” untuk memulai pembedahan kode yang mengasyikan ini.
Yang
patut diingat sebelum melakukan pembedahan adalah, bahwa proses
pembuatan implementasi keygen ini saling bergantung dengan kode pada
implementasi verifikasi. Dan, kita harus melihat bahwa kode keygen ini
saling bertolak belakang dengan verifikasi. Yang artinya, jika
verifikasi melakukan “buka”, maka keygen melakukan “tutup”, jika
verifikasi melakukan “tambah”, maka keygen melakukan “kurang”, dst.
Oke,
kita mulai pembedahannya. Kita bisa lihat pada baris 33 sampai 83,
terdapat dua fungsi encrypt yang, tentu saja, dibuat seragam, seperti
halnya pada implementasi verifikasi. Dan ya, seperti sebelumnya,
pembahasan satu metoda bisa mewakili metoda yang satunya. Baris 35
menunjukkan konstanta key yang memang harus sama nilainya dengan proses
decrypt, agar kedua proses tersebut saling berhubungan.
Karena
proses encrypt ini bertolak belakang dengan proses decrypt, maka kita
akan melakukan pembahasan secara terbalik dari bawah ke atas, sambil
me-review kode verifikasi. Jadi ada baiknya, jika kita buka kode
verifikasi (decrypt) dan keygen (encrypt) secara bersamaan, kecuali jika
anda memang sudah hafal dan paham kode verifikasi secara keseluruhan.
Pada
baris 44 sampai 48 di kode verifikasi, seperti yang telah dibahas,
bahwa fungsi decrypt mengambil setiap dua karakter dari string yang
di-input atau cipher text untuk kemudian merubahnya menjadi nilai hex
dan menyimpannya ke dalam array of byte. Maka, agar fungsi encrypt kita
menghasilkan cipher text yang valid untuk proses tersebut, kita harus
melakukan fungsi sebaliknya, ya, merubah array of byte menjadi string
dengan format hex. Baris 51 sampai 55 melakukan hal tersebut. Fungsi
built-in Delphi “IntToHex” menghasilkan representasi hex dari integer
(atau byte) yang diinput. Untuk contoh, silahkan review contoh di atas
pada proses verifikasi, tetapi baca dari bawah ke atas.
Kemudian
pada baris 49 sampai 52 di kode verifikasi, fungsi decrypt melakukan
fungsi inti decrypt sesuai dengan metoda yang dipakai terhadap array of
byte hasil konversi dari string yang di-input tadi(cipher text). Maka
pada baris 47 sampai 50 di kode keygen, fungsi encrypt harus melakukan
fungsi inti encrypt sesuai dengan metoda yang dipakai terhadap array of
byte yang nantinya akan di konversi menjadi string output(cipher text),
seperti yang telah dibahas pada paragraf sebelumnya.
Lalu pada
baris 54 sampai 57 di kode verifikasi, fungsi decrypt mengkonversi lagi
array of byte yang telah di “decrypt” ke dalam bentuk string, tetapi
kali ini dengan cara subtitusi nilai byte dengan nilai ASCII yang
bersangkutan, atau dengan kata lain melakukan konversi byte to ASCII.
Maka, fungsi encrpyt kita harus melakukan kebalikannya, yap, konversi
ASCII to byte. Baris 43 sampai 46 pada kode keygen menunjukkan hal
tersebut, dan ya, fungsi built-in Delphi “Ord” menolong kita untuk
melakukan hal tersebut. Dan lagi-lagi, untuk contoh, silahkan lihat
contoh “GwTampan” di atas dari bawah ke atas.
Begitulah isi dari
fungsi encrypt yang merupakan kebalikan dari fungsi decrypt. Anda bisa
menutup kode verifikasi sekarang, jika anda mau. Berikutnya, mari kita
bahas penggunaan dari fungsi encrypt ini, pada saat user menekan tombol
“G 3 N” yang terletak pada baris 85 sampai 119.
Tidak banyak yang
dilakukan dalam kode ini. Baris 97 sampai 108 melakukan hal yang sama
dengan yang ada pada kode verifikasi, yaitu memaksa plain text agar
tetap memiliki panjang 8 karakter, seperti yang telah dibahas
sebelumnya. Dan, jika anda belum menyadarinya, untuk nama
“CryptographyIsFun” dan “CryptographyIsSuck” akan menghasilkan serial
yang sama, dikarenakan unsur pemaksaan ini. Lalu pada baris 109 sampai
117, kode melakukan encrypt kepada nama (plain text) yang diinput
menjadi cipher text yang kemudian di-output menjadi serial.
Demikianlah
keseluruhan proses implementasi dari kriptografi dengan key simetris
ini. Dan oke, untuk lebih memperjelas lagi, mari kita rangkum
keseluruhan proses dengan arah yang “lurus” atau dari encrypt sampai
decrypt. Kali ini sang keygen akan kita sebut pengirim, dan sang
verifikator akan kita sebut penerima.
Pertama, pengirim
men-encrypt nama yang di-input untuk kemudian di-output menjadi serial.
Lalu, pengirim mengirimkan pasangan nama dan serial ini kepada penerima.
Kemudian, penerima mengecek pasangan nama dan serial yang dikirimkan
dengan cara, men-decrypt serial untuk kemudian dibandingkan dengan nama.
Jika cocok, maka pasangan nama dan serial tersebut valid dan memang
berasal dari pengirim yang sejati, jika tidak cocok, maka pengirim
tersebut palsu.
Yap, seperti itulah salah satu contoh implementasi
kriptografi dua arah dengan key simetris. Mohon maaf bila penjelasannya
terkesan berbelit-belit dan membingungkan, tetapi saya telah mencoba
yang terbaik untuk menjelaskan hal yang memang sangat teknis ini. Dan
ya, coba “rasakan” bagaimana kode ini mengalir, agar lebih mudah
memahaminya.
To be continued…
Banggalah Pada Dirimu Sendiri, Meski Ada Yang Tak Menyukai. Kadang Mereka Membenci Karena Mereka Tak Mampu Sepetimu.
NavBar1
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar