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.
Thanks to http://www.binushacker.net