Jangan gunakan Md5 hashing (Danger)

Kali ini kita akan membahas tentang Hashing password. Apa sih hash itu ?

Referensi


Hash

Hash adalah hasil enkripsi dari sebuah password atau informasi yang dianggap penting.

Enkripsi

Enkripsi adalah suatu metode yang digunakan untuk mengkodekan data sedemikian rupa sehingga keamanan informasinya terjaga dan tidak dapat dibaca tanpa di dekripsi (kebalikan dari proses enkripsi) dahulu.

Ok mungkin yang anda sering lihat adalah md5 hash yang mana itu adalah hash password yang sangat tidak direkomendasikan.

<?php 

$password = 'thisismypassword';
$hashpass = '31435008693ce6976f45dedc5532e2c1';
if ($hashpass === md5($password)) {
    echo 'Said Ok!';
}

That's it, tapi itu tidak cukup. Jika anda kunjungi https://crackstation.net/ maka disana akan anda akan bisa melihat apa sebenarnya password dari hash anda tersebut yang mana itu sangat berbahaya.

Nah sekarang kita coba untuk membuat lebih strong, kita buat sangat - sangat komplikasi.

echo hash('sha256', 'thisismypassword');
// 1da9133ab9dbd11d2937ec8d312e1e2569857059e73cc72df92e670928983ab5

Sayang nya itu juga tidak cukup. Ohhh... Anda harus butuh yang lebih strong? Mari kita buat lebih - lebih dan lebih strong lagi.

<?php 

$password   = 'thisismypassword';
$salt       = 'abcdef';
$randomslt  = 'xyz';

echo md5($password . $salt . $randomslt);

Mungkin anda menyangka dengan menggunakan salt dan randomslt, Walaupun Crack Station tidak bisa menebak apa password anda, tapi ini juga belum benar - benar hash yang sebenarnya.

Baik kita telah bicara banyak tentang hash yang tidak direkomendasikan dipakai, sekarang kita akan bicara hash yang sangat di rekomendasikan. Anda bisa baca - baca di http://php.net/manual/en/book.password.php kita punya 4 funtion yang bisa kita gunakan untuk verify dan sebagainya. Bagaimana kita akan mengimplementasikan nya ? Let's roll to code!

<?php 

$password = password_hash('mybigpassword', PASSWORD_DEFAULT);
echo $password; // $2y$10$uN4RFkTpdEFf7PpFDXFiCO4EjnxRpWJE0CpNW802WjFtaFcJNCinS

Anda terus refresh browser anda pastinya hasilnya akan berubah waktu demi waktu. Jika anda ingin melihat info tentang keterangan passwordnya, anda bisa dump seperti:

$password = password_hash('mybigpassword', PASSWORD_DEFAULT);
var_dump(password_get_info($password));

Anda akan lihat cost dan nama algoritmanya disana, hanya sekedar info saja. Tidak cukup disana saja, kita bisa tambah costnya.

$password = password_hash('mybigpassword', PASSWORD_DEFAULT, ['cost' => 12]);
echo $password; // $2y$12$nwGboP.rvMTETidYK8RF.uU9Huu/7J8Pw6RT5NvGCyUaRjPBbwy42

Nah bagaimana cara untuk ceknya, anda lihat browser, nah hasil hashnya bisa anda copy seperti:

$2y$12$nwGboP.rvMTETidYK8RF.uU9Huu/7J8Pw6RT5NvGCyUaRjPBbwy42

Lalu kita akan masukkan hasilnya hasnya kedalam variabel, layaknya password ini yang telah berada didalam database, jadi anda bisa bayangkan user register setelah register mereka akan log in dengan password yang telah di daftarkan mereka, maka kita akan cek details dari password apakah sama dengan yang ada didatabase atau tidak.

<?php 

$password = 'mybigpassword';
$dbpassword = '$2y$12$nwGboP.rvMTETidYK8RF.uU9Huu/7J8Pw6RT5NvGCyUaRjPBbwy42';

if (password_verify($password, $dbpassword)) {
    echo 'You are in';
}

Ini lebih secure dari apa yang gunakan selama ini, jika anda sudah menggunakan nya GREAT untuk anda, jika belum, maka silahkan mulai menggunakan cara yang satu ini.

Nah kita akan bicara sedikit tentang Object oriented programming, Ada baiknya semua itu kita gunakan dalam class dan method, kita buat class dan beberapa method seperti pembuatan hashnya, dan checknya. Sebelum kita kesana anda harus persiapkan terlebih dahulu file dengan nama index.php dan Hash.php Open Hash.php

<?php 

class Hash {
    public static function make($password)
    {
        return password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
    }

    public static function check($password, $hash)
    {
        if (password_verify($password, $hash)) {
            return true;
        }
    }
}

Nah dengan begini mungkin anda akan mudah karna anda mempunya beberapa shortcut way untuk membuat hash, bayang kan anda punya aplikasi pendaftaran user. Maka anda akan gunakan hash -> make.

$password = Hash::make($_POST['password']);

Kira kira seperti itu, sesudah itu jika user telah mendaftar, anda butuh untuk check apakah passwordnya dibaca dengan yang ada didatabase, anggap anda mempunya log in form. Maka anda akan check passwordnya dengan cara.

if (Hash::check($_POST['password'], $dbpassword)) {
    echo 'Berhasil log in';
}

die('Salah!!!');

Value dari $dbpassword adalah password user yang telah mendaftar. Maka hanya menggunakan shortcut seperti itu maka anda telah membuat hash yang sangat - sangat secure, dan sangat di rekomendasikan oleh PHP sendiri, jangan gunakan cara yang salah, instead gunakan lah cara yang benar yang mana itu sangat direkomendasikan tapi banyak di lupakan orang. Selesai sudah pembahasan tentang hashing password, mudah - mudahan anda mendapat ilmu dari artikel ini. Thanks for reading I'm irsyad see you :).



Generic placeholder image
By Irsyad A. Panjaitan
I am error

Comments

Please login to leave a comment!