Minggu, 19 Mei 2013

Cara Mengenkripsi URL

Dalam sebuah aplikasi berbasis web, terkadang anda perlu mengenkripsi URL yang mungkin mengandung parameter dan nilai di dalamnya (bisanya digunakan saat menggunakan method GET). Ada banyak cara untuk mengenkripsi URL. Anda bisa menggunakan berbagai algoritma yang ada. Yang umum digunakan biasanya base64_encode  - base64_decode. Namun apabila anda menggunakan framework Codeigniter fungsi tersebut tidak bisa anda gunakan begitu saja karena akan menghasilkan karakter '=' pada URL anda, yang tidak diperbolehkan dalam CodeIgniter (kecuali anda mengubah konfigurasi dalam config.php). Kenapa alasannya tidak diperbolehkan? Saya juga kurang begitu tahu.

Jika anda tidak begitu fokus akan keamanan dan hanya ingin menyumbunyikan parameter atau value dalam URL anda, anda dapat menggunakan class yang saya dapatkan dari hasil googling berikut. Sayangnya saya tidak mengetahui siapa authornya secara pasti, jadi saya tidak bisa memberikan kredit dalam tulisan saya ini.
<?php 
class Encryption {
    var $skey   = "coretanasha21dotblogspotdotcom"; // you can change it

    public  function safe_b64encode($string) {

        $data = base64_encode($string);
        $data = str_replace(array('+','/','='),array('-','_',''),$data);
        return $data;
    }

    public function safe_b64decode($string) {
        $data = str_replace(array('-','_'),array('+','/'),$string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }

    public  function encode($value){ 

        if(!$value){return false;}
        $text = $value;
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv);
        return trim($this->safe_b64encode($crypttext)); 
    }

    public function decode($value){

        if(!$value){return false;}
        $crypttext = $this->safe_b64decode($value); 
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv);
        return trim($decrypttext);
    }
}
Untuk mengenkripsi URL anda tuliskan:
$this->encryption->encode($url); 
Dan untuk mendekripsi URL anda kembali tuliskan:
$this->encryption->decode($url);

Selamat mencoba.

NB: Anda bisa mengubah $skey sesuai dengan keinginan anda.

1 komentar: