Home > PHP > Security::cipher tidak sesuai harapan

Security::cipher tidak sesuai harapan


Jika kita bermain-main dengan CakePHP, maka Security::cipher bukanlah merupakan sesuatu yang asing bagi kita. Security::cipher merupakan sebuah fungsi yang menyediakan fasilitas encryptdecrypt. Dengan format pemakaian sebagai berikut:

    Security::cipher($text, $key);

Secara automatis fungsi tersebut akan mengembalikan nilai sesuai $text, jika $text merupakan text maka akan mengembalikan encrypted $text, begitu juga sebaliknya, jika $text merupakan encrypted $text maka akan mengembalikan decrypted $text. Fungsi ini berjalan sangat sempurna ketika kita bermain-main di dalam ‘tempurung’, tetapi setelah kita keluar dari ‘tempurung’ dan siap berjalan dikejamnya dunia, maka terjadilah hal sebagai berikut:

    $text1 = 'yosua onesimus';
    debug($text1);
    $text2 = Security::cipher($text1, $key);
    debug($text2);
    $text3 = Security::cipher($text2, $key);
    debug($text3);

Ketika baris kode diatas dijalankan di dalam ‘tempurung’, maka akan terlihat bahwa $text1 dan $text3 bernilai sama, tetapi ketika sudah merasakan manis-pahitnya dunia nyata, maka nilai dari $text1 dan $text3 menjadi berbeda.

Setelah bertanya-tanya sama om google, ternyata hal tersebut diakibatkan oleh srand(), untuk menghemat waktu, kita langsung temui si biang kerok yang beralamat di ‘\cake\libs\security.php‘, dengan nama method: cipher.

Untuk memperbaiki hal tersebut, kita harus menindak tegas chiper dengan cara mengcommentnya, dan menggantikannya dengan method yang lebih layak:

    function cipher($text, $key = '') {
        $key .= Configure::read('Security.cipherSeed');

        $out = '';
        $textLength = strlen($text);
        $keyLength = strlen($key);
        $k = 0;

        for ($i = 0; $i < $textLength; $i++) {
            $seed = md5($key . $key[($k++) % $keyLength]);
            $mask = hexdec($seed[6] . $seed[9]); //🙂
            $out .= chr(ord($text[$i]) ^ $mask);
        }

        return $out;
    }

Dan.. Bukan sulap bukan sihir.. $text1 dan $text3 kembali bernilai sama, bak pinang dibelah dua..

Semoga membantu..

[sumber|sumber]

Categories: PHP Tags:
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: