Tutorial Menggunakan password_hash dan password_verify

Pengertian password_hash
Password_hash adalah  fungsi di PHP yang bisa digunakan untuk hashing atau enkripsi menggunakan algoritma satu arah (one-way hashing). Fungsi ini dapat kita temukan pada PHP versi 5.5 atau diatasnya
Tidak seperti hash md5, password_hash bisa menghasilkan nilai hashing yang berbeda – beda untuk satu kalimat yang sama
Karena ini merupakan enkripsi satu arah, maka enkripsi ataupun hash yang telah dihasilkan tidak dapat dikembalikan lagi kedalam text aslinya.

Dalam sebuah contoh misalknya saya memiliki sebuah password mypassword lalu kemudian password tersebut di hash menggunakan fungsi password_hash, maka hasilnya password tersebut akan menjadi sebuah nilai acak seperti yang terlihat pada gambar dibawah ini



Penjelasan kode :
  • password_hash merupakan fungsi untuk melakukan hashing
  • pasword_default merupakan algoritma bawaan yang digunakan untuk hash yang menggunakan bcrypt yang dapt menghasilkan panjang output sebanyak 60 karakter atau bahkan lebih sehingga disarnakan untuk mengalokasikan field pada database sebanyak 255 karakter.
Dalam praktiknya nilai hash yang dihasilkan perlu disimpan kedalam database untuk selanjutnya dicocokan menggunakan fungsi password_verifiy()

Pengertian password_verify
Password_verify merupakan fungsi PHP yang digunakan untuk menocokan password yang telah di enkrispsi menggunakan fungsi password_hash()
Contoh penggunaan
<?php
//misalnya saya mendapatkn seperti pada variabel $hashed
$hashed='$2y$10$BxmoGKGYrENESYBZskTCY.SlDNBTeEC3ACe7Ue7IwdOGfOzM78Rvm';
//mencocokan kata mypassword dengan variabel $hashed yang didapatkan dari hasil hashing
if(password_verify('mypassword', $hashed)){
 echo "<br>Password cocok";
}else{
 echo "Password tidak cocok";
}

?>

Penjelasan kode :
  • $hashed merupakan variabel yang menampung nilai hasil enkripsi dari password_hash
  • Password_verify merupakan fungsi yang digunakan untuk mencocokan karakter asli dengan karakter yang sudah terhash
  • mypassword merupakan password yang kita buat

Contoh Implementasi password_hash dan password_verify
<?php
// Include config file
require_once 'config.php';
 
// Define variables and initialize with empty values
$username = $password = "";
$username_err = $password_err = "";
 
// Processing form data when form is submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // Check if username is empty
    if(empty(trim($_POST["username"]))){
        $username_err = 'Please enter username.';
    } else{
        $username = trim($_POST["username"]);
    }
    
    // Check if password is empty
    if(empty(trim($_POST['password']))){
        $password_err = 'Please enter your password.';
    } else{
        $password = trim($_POST['password']);
    }
    
    // Validate credentials
    if(empty($username_err) && empty($password_err)){
        // Prepare a select statement
        $sql = "SELECT username, password FROM users WHERE username = ?";
        
        if($stmt = mysqli_prepare($link, $sql)){
            // Bind variables to the prepared statement as parameters
            mysqli_stmt_bind_param($stmt, "s", $param_username);
            
            // Set parameters
            $param_username = $username;
            
            // Attempt to execute the prepared statement
            if(mysqli_stmt_execute($stmt)){
                // Store result
                mysqli_stmt_store_result($stmt);
                
                // Check if username exists, if yes then verify password
                if(mysqli_stmt_num_rows($stmt) == 1){                    
                    // Bind result variables
                    mysqli_stmt_bind_result($stmt, $username, $hashed_password);
                    if(mysqli_stmt_fetch($stmt)){
                        if(password_verify($password, $hashed_password)){
                            /* Password is correct, so start a new session and
                            save the username to the session */
                            session_start();
                            $_SESSION['username'] = $username;      
                            header("location: welcome.php");
                        } else{
                            // Display an error message if password is not valid
                            $password_err = 'The password you entered was not valid.';
                        }
                    }
                } else{
                    // Display an error message if username doesn't exist
                    $username_err = 'No account found with that username.';
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }
        }
        
        // Close statement
        mysqli_stmt_close($stmt);
    }
    
    // Close connection
    mysqli_close($link);
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; }
        .wrapper{ width: 350px; padding: 20px; }
    </style>
</head>
<body>
    <div class="wrapper">
        <h2>Login</h2>
        <p>Please fill in your credentials to login.</p>
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
            <div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>">
                <label>Username</label>
                <input type="text" name="username"class="form-control" value="<?php echo $username; ?>">
                <span class="help-block"><?php echo $username_err; ?></span>
            </div>    
            <div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
                <label>Password</label>
                <input type="password" name="password" class="form-control">
                <span class="help-block"><?php echo $password_err; ?></span>
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Login">
            </div>
            <p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
        </form>
    </div>    
</body>
</html>


Kesimpulan
Sangat disarankan sekali untuk menggunakan password_hash() karena fungsi tersebut dapat menghasilkan nilai hashig satu arah. Jadi misalnya sekalipun orang lain tahu nilai hash yang tersimpan pada database, tidak mungkin orang tersebut tahu nilai asli dari password yang tersimpan.

Jadi sebaiknya sekarang dalam membangun sebuah aplikasi berbasis web php, gunakan password_hash dan password_verify sebagai keamanan untuk loginnya.

Untuk mempermudah dalam proses belajar, saya sudah menyiapkan contoh imlementasi password_hash dan password_verify yang bisa Anda download dibawah ini


[ DOWLOAD ]

9 Responses to "Tutorial Menggunakan password_hash dan password_verify"

  1. Wah saya kurang begitu mengerti ya ,kirain pasword model email atau akun media sosial gitu.

    ReplyDelete
    Replies
    1. Cara lerjanya lebih ke pengaman akun aja mas sepertinya,..ea 😀

      Delete

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin

nagabet76slot gacorslot online1213141516Slot Online Menghadirkan Pengalaman Digital Yang Didukung Pemrosesan Data Secara Real TimeMahjongways Menganalisis Pola Visual Dan Dinamika Simbol Berdasarkan Pemrosesan Data DigitalMahjongways Mengembangkan Dinamika Permainan Melalui Pengelolaan Data Dan Elemen Visual TerintegrasiAnalisis Komputasi Modern Membantu Memetakan Dinamika Sistem Digital Berdasarkan Data ObservasiMember Baru Mendorong Dinamika Komunitas Digital Menuju Pengalaman Yang Lebih Aktif Dan Menarikslot onlinemahjongwayasarsitektur layananpemrosesan data adaptifmember baruSlot Online Terbaru Menghadirkan AnalisisScatter Hitam Dianalisis Melalui PemetaanPola Scatter Hitam Membentuk Distribusi Visual Yang Dapat Dikaji Menggunakan Komputasi AdaptifArsitektur Teknologi TerdistribusiTeknologi Visualisasi DataMahjongways Mengembangkan Interaksi Visual Melalui Integrasi Simbol Digital Yang DinamisAnalisis Mahjongways Memetakan Dinamika Visual Dan Respons Antarmuka Berbasis DataScatter Hitam Dianalisis Melalui Pemetaan Struktur Simbol Digital Berbasis Komputasi AdaptifAlgoritma Scatter Hitam Membantu Mengidentifikasi Dinamika Pola Melalui Analisis Data ObservasiPg Soft Mengembangkan Sistem Rendering Adaptif Untuk Mendukung Visualisasi Digital ModernTeknologi Pg Soft Mengoptimalkan Pemrosesan Grafis Melalui Arsitektur Rendering TerintegrasiTeknologi Pemodelan Data Membantu Menganalisis Dinamika Informasi Pada Ekosistem Digital ModernArsitektur Komputasi Terdistribusi Meningkatkan Keandalan Pengelolaan Data Pada Platform DigitalTeknologi Kecerdasan Komputasional Mendorong Pengembangan Sistem Digital Yang Lebih AdaptifPemrosesan Data Modern Membantu Memetakan Pola Informasi Melalui Pendekatan Komputasi TerukurTeknologi Integrasi Data Mempermudah Sinkronisasi Informasi Dalam Lingkungan Digital TerpaduVisualisasi Komputasi Modern Membantu Menginterpretasikan Perubahan Pola Pada Sistem Digital KompleksTeknologi Otomasi Data Meningkatkan Efisiensi Pengelolaan Informasi Pada Infrastruktur DigitalModel Komputasi Adaptif Mendukung Pengembangan Teknologi Digital Melalui Analisis Data BerkelanjutanPengembangan Pg Soft Mengintegrasikan Teknologi Rendering Dengan Interaksi Visual Yang ResponsifPg Soft Menerapkan Komputasi Visual Untuk Meningkatkan Efisiensi Pengolahan Elemen DigitalEksplorasi Scatter Hitam Memetakan Distribusi Simbol Melalui Model Analitik Digital TerintegrasiPola Scatter Hitam Dikaji Menggunakan Pendekatan Visualisasi Data Dan Pemodelan StatistikMahjongways Menghadirkan Pendekatan Visual Interaktif Melalui Pemrosesan Simbol Yang AdaptifEksplorasi Mahjongways Mengungkap Perubahan Pola Visual Dalam Lingkungan Digital Terintegrasiqris dan pg soft dalam pembahasan ekosistem transaksi digitalmemahami kaitan pembayaran qris dengan platform game pg softpg soft dan perkembangan teknologi pembayaran berbasis qrissistem nontunai qris dalam konteks layanan game digitalqris pada platform game dan pentingnya verifikasi transaksimenelusuri hubungan qris dan layanan digital pg softpg soft qris dan perubahan kebiasaan pembayaran melalui mobilekeamanan transaksi qris dalam pembahasan platform game onlineteknologi pembayaran qris dan ekosistem game pg softmengenal batas layanan qris dan platform permainan digitalmahjong ways dan detail simbol yang membentuk identitas permainanmengulik animasi mahjong ways dari sudut desain digitalmahjong ways dalam perbincangan tren game di komunitas internetperpaduan motif klasik dan visual modern pada mahjong waysmahjong ways mengenal fitur tumble dan perubahan simbolwarna dan komposisi grafis yang menandai tampilan mahjong waysmahjong ways dan perjalanan game bertema tile ke platform mobilemembedah mitos pola permainan mahjong ways dengan fakta probabilitasmahjong ways menjadi bahan cerita di tengah budaya game digitaldi balik tampilan mahjong ways ada peran audio dan animasigame online menghadirkan misi unik dan dunia penuh kejutanmenjelajahi arena dan karakter dalam game online populergame online dan strategi pemain menghadapi tantangan baruketika game online menjadi ruang berkumpul komunitas digitalrahasia desain level yang membuat game online menarik dijelajahigame online dalam perubahan gaya bermain generasi mudadari misi sampingan hingga bos akhir dunia game onlinekarakter dan alur cerita yang membentuk identitas game onlinegame online menggabungkan eksplorasi dan interaksi antarpemainmenelusuri evolusi mode permainan dalam game onlinegame digital membuka ruang eksperimen bagi desainer visualdi balik layar proses pembuatan dunia game digitalteknologi audio 3d mengubah suasana dalam game digitalgame digital dan perkembangan karakter berbasis kecerdasan buatantekstur pixel dan perjalanan estetika game digitalbagaimana fisika virtual membentuk gerakan dalam game digitalgame digital menjelajahi batas antara seni dan teknologiproses rendering menghidupkan lingkungan game digitaldunia terbuka menjadi tantangan baru produksi game digitalinovasi kontrol interaktif dalam perjalanan game digital modern