Fungsi Enkripsi dan Dekripsi Menggunakan PHP
Sistem yang kita buat itu tidak selalu aman. Tidak ada sistem yang benar - benar seratus persen aman. Selalu ada celah keamanan yang rentan diserang dari luar, terutama apabila sistem yang kita buat sudah terhubung dengan jaringan internet. Selalu ada celah yang luput dari pengamatan. Kabar baiknya, kawan... kita masih bisa mengupayakan untuk mengurangi celah - celah keamanan dalam sistem kita. Salah satunya adalah dengan metode enkripsi.
Apa itu enkripsi?
Berdasarkan pengertian yang saya ambil di Wikipedia, Enkripsi itu proses buat mengamankan sebuah informasi. Lalu gimana cara mengamankannya? caranya informasi ini diubah menjadi deretan huruf dan angka yang ngga bisa dibaca tanpa pake ilmu khusus. Contoh penggunaannya biasanya buat nyembunyiin password di database. Biasanya setiap password yang disimpan di database itu dienkripsi supaya ga bisa dibaca oleh orang yang ga punya akses.
Nah, karena kebetulan ada tugas kuliah juga, kali ini saya akan bahas beberapa metode enkripsi menggunakan fungsi yang ada di bahasa pemrograman PHP. Check this out ya!
[1] Encode dan Decode
Fungsi yang biasa digunakan adalah base64_encode() dan base64_decode(). Biasa keliatan kan kaya apa fungsinya? Ya, untuk mengenkripsi kita bisa gunain fungsi base64_encode dan buat mengembalikan teks yang sudah dienkripsi kita bisa gunain fungsi base64_decode. Nah, berikut ini adalah contoh penggunaannya:
<?php
$plaintext = 'ini blog recodeku.blogspot.co.id.';
//Encode plaintext
$encode = base64_encode($plaintext);
//Decode plaintext
$decode = base64_decode($encode);
echo "teks = ".$plaintext."<br/>";
echo "teks yang diencode = ".$encode."<br/>";
echo "teks yang didecode = ".$decode;
?>
Dan jika kita run di browser, bakal muncul tampilan kaya gambar di bawah:
Karena prosesnya sederhana dan rentan terhadap keamanan data, biasanya fungsi base64 ini digunakan bersamaan dengan fungsi lainnya.
[2] Hashing
Nah, cara yang kedua adalah menggunakan metode hashing. Apa itu hashing? Yaitu salah satu metode yang bisa mengubah karakter apapun menjadi karakter acak. Nah hash ini ada banyak lho! Yang sering digunain itu (katanya) adalah MD5, SHA1, SHA256 dan CRC32. Ga kaya fungsi encode dan decode, hash ini cuma bisa enkripsi aja. Lho? Maksudnya? Kalau kamu ngubah teks, kamu ga ngembaliin teks itu lagi, ga bisa didekripsi lagi. Kenapa? Karena hash ini enkripsi yang bersifat satu arah. Saya biasanya gunain ini buat nyimpen password. Tapi kalau berdasar yang sudah berpengalaman, fungsi ini ga recommended lagi. Di bawah ini contoh penggunaannya:
<?php
$plaintext = 'ini blog recodeku.blogspot.co.id.';
//md5 hash
$md5 = md5($plaintext);
//sha1 hash
$sha1 = sha1($plaintext);
//crc32 hash
$crc32 = crc32($plaintext);
echo "teks = ".$plaintext."<br/>";
echo "MD5 Hash = ".$md5."<br/>";
echo "SHA1 Hash = ".$sha1."<br/>";
echo "CRC32 Hash = ".$crc32."<br/>";
?>
Lalu, coba kita run di browser. Berikut ini adalah tampilannya:
[3] Encrypt dan Decrypt
Nah, kalau berdasar diskusi di forum pemrograman, metode encrypt dan decrypt ini recommended lho, kawan! Metode ini sering digunakan sama web developer buat mengamankan password yang disimpan di database. Nah, fungsi yang biasa digunakan di PHP itu adalah fungsi mcrypt cipher. Beda dengan metode Hash, gunain fungsi mcrypt ini bisa mengenkripsi dan juga mengembalikan lagi teks yang sudah dienkripsi lho! Selain itu, fungsi mcrypt ini memiliki beberapa metode algoritma cipher yang digunakan. Ada mcrypt_3des, mcrypt_blowfish, mcrypt_rijndael_128 dan lain-lain. Nah, berikut ini contoh penggunaannya:
<?php
/* Open the cipher */
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* Create the IV and determine the keysize length, use MCRYPT_RAND
* on Windows instead */
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
/* Create key */
$key = substr(md5('ini kunci rahasia'), 0, $ks);
/* Intialize encryption */
mcrypt_generic_init($td, $key, $iv);
$plaintext = 'ini blog recodeku.blogspot.co.id.';
/* Encrypt data */
$encrypted = mcrypt_generic($td, $plaintext);
/* Terminate encryption handler */
mcrypt_generic_deinit($td);
/* Initialize encryption module for decryption */
mcrypt_generic_init($td, $key, $iv);
/* Decrypt encrypted string */
$decrypted = mdecrypt_generic($td, $encrypted);
/* Terminate decryption handle and close module */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/* Show string */
echo "teks = ".$plaintext."<br/>";
echo "teks yang dienkripsi : ".$encrypted."<br/>";
echo "teks yang didekripsi kembali :".trim($decrypted) . "\n";
?>
Nah, sekarang kita coba run di browser:
Tidak ada sistem yang benar - benar seratus persen aman. Begitulah yang dikatakan kebanyakan orang. Kabar baiknya kita masih bisa mengupayakan untuk mengurangi celah - celah keamanan dalam sistem yang kita buat.
Selamat mencoba... Semangat terus ya!! :D
***
Note:
[a] Beberapa gambar diambil dari berbagai sumber di www.google.com, credit to its owner. ^^
[b] Materi tentang enkripsi ini ada di manual PHP lho! ^^
aplikasinya ada tidak
BalasHapus
BalasHapuskalo mo aman pake ioncube aja gan..
ada yg onlinenya spt di https://enkripsiphp.com