PHP - Penyampanan: Panduan Pemula

Hai, para pengembang PHP yang berambisi! Hari ini, kita akan melangsungkan perjalanan menarik ke dunia penyampanan. Jangan khawatir jika Anda belum pernah mendengar tentang penyampanan sebelumnya - pada akhir panduan ini, Anda akan menyampan seperti seorang ahli!

PHP - Hashing

Apa Itu Penyampanan?

Sebelum kita masuk ke detailnya, mari mulai dari dasar. Bayangkan Anda punya pesan rahasia, dan Anda ingin mengubahnya menjadi kode yang mustahil untuk ditebak. Itu sebenarnya apa yang penyampanan lakukan! Itu mengambil masukan Anda (seperti kata sandi atau berkas) dan mengubahnya menjadi string ukuran tetap karakter. String ini disebut hash.

Ini adalah analogi menarik: bayangkan penyampanan seperti mesin blender ajaib. Anda memasukkan bahan apa pun (masukan Anda), dan itu selalu memberikan Anda smoothie ukuran yang sama (hash), tetapi dengan rasa unik tergantung apa yang Anda masukkan.

Aplikasi Penyampanan

Sekarang, Anda mungkin berpikir, "Mengapa kita memerlukan penyampanan?" Pertanyaan bagus! Penyampanan memiliki banyak aplikasi dalam dunia komputasi. Mari jelajahi beberapa di antaranya:

  1. Penyimpanan Kata Sandi: Daripada menyimpan kata sandi dalam teks biasa (yang sangat tidak aman), situs web menyimpan hash kata sandi Anda. Ketika Anda masuk, mereka menyampan apa yang Anda masukkan dan membandingkannya dengan hash yang disimpan.

  2. Integritas Data: Penyampanan dapat memverifikasi jika sebuah berkas telah disembunyikan. Jika hanya satu byte berubah, keseluruhan hash akan berbeda!

  3. Tanda Tangan Digital: Ini menggunakan penyampanan untuk memastikan keaslian dokumen digital.

  4. Caching: Situs web besar menggunakan penyampanan untuk secara cepat mengambil data yang disimpan dalam cache.

Proses Penyampanan

Mari kita pecah proses penyampanan menjadi langkah-langkah sederhana:

  1. Ambil masukan (seperti kata sandi).
  2. Terapkan algoritma penyampanan kepadanya.
  3. Dapatkan output ukuran tetap (hash).

Bagian yang menarik adalah: tidak peduli seberapa panjang atau pendek masukan Anda, output (hash) akan selalu memiliki panjang yang sama untuk algoritma tertentu.

Algoritma Penyampanan di PHP

PHP mendukung beberapa algoritma penyampanan. Mari lihat beberapa yang paling umum:

  1. MD5 (Message Digest algorithm 5)
  2. SHA-1 (Secure Hash Algorithm 1)
  3. SHA-256 (bagian dari SHA-2)
  4. Bcrypt (terutama baik untuk kata sandi)

Setiap algoritma ini memiliki kekuatan dan kasus penggunaannya. Misalnya, bcrypt secara khusus dirancang untuk penyampanan kata sandi dan lebih aman daripada MD5 atau SHA-1 untuk tujuan itu.

Fungsi Penyampanan di PHP

Sekarang, mari kita masukkan tangan kita ke dalam kode PHP nyata! PHP menyediakan beberapa fungsi bawaan untuk penyampanan. Berikut adalah tabel dari yang paling sering digunakan:

Fungsi Deskripsi
md5() Menghitung hash MD5 dari string
sha1() Menghitung hash SHA-1 dari string
hash() Menghasilkan nilai hash menggunakan berbagai algoritma
password_hash() Membuat hash kata sandi (disarankan untuk kata sandi)
crc32() Menghitung polinomial CRC32 dari string

Mari lihat beberapa contoh tentang bagaimana menggunaan fungsi-fungsi ini:

1. Penyampanan MD5

$string = "Hello, World!";
$md5_hash = md5($string);
echo "Hash MD5 dari '$string': " . $md5_hash;

Output:

Hash MD5 dari 'Hello, World!': 65a8e27d8879283831b664bd8b7f0ad4

Dalam contoh ini, kita menggunakan fungsi md5() untuk menyampan string "Hello, World!". Hasil hash selalu 32 karakter panjang, tanpa peduli panjang masukan.

2. Penyampanan SHA-1

$string = "PHP is awesome!";
$sha1_hash = sha1($string);
echo "Hash SHA-1 dari '$string': " . $sha1_hash;

Output:

Hash SHA-1 dari 'PHP is awesome!': 4eb40c4bde4d39f32ab9064ec9c93396f6fdcf9f

Fungsi sha1() bekerja sama seperti md5(), tetapi menghasilkan hash 40 karakter.

3. Menggunakan Fungsi hash()

Fungsi hash() lebih fleksibel, memungkinkan Anda menentukan algoritma mana yang akan digunakan:

$string = "Hashing is fun!";
$algorithms = ['md5', 'sha1', 'sha256'];

foreach ($algorithms as $algo) {
$hash = hash($algo, $string);
echo "Hash dari '$string' menggunakan $algo: " . $hash . "\n";
}

Output:

Hash dari 'Hashing is fun!' menggunakan md5: 4d6b94ef062847891a1e97a716541059
Hash dari 'Hashing is fun!' menggunakan sha1: 8a7ced2e4a8d64daa28566150c2add1c04812e53
Hash dari 'Hashing is fun!' menggunakan sha256: 7b1b6d4c6e48183f2b1b3f2847736fb93339f45e254cb21330f3d0adc3e6d3db

Contoh ini menunjukkan bagaimana algoritma yang berbeda menghasilkan panjang hash dan nilai yang berbeda untuk masukan yang sama.

4. Penyampanan Kata Sandi

Untuk penyampanan kata sandi, disarankan untuk menggunakan fungsi password_hash():

$password = "mySecurePassword123";
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
echo "Hashed password: " . $hashed_password;

Output:

Hashed password: $2y$10$6Q5DYfJKCsa7C/eV4Wh9OeDjTJ0XLB.Vr7F1C5E6kJRBVWPwMDKP.

Fungsi ini secara otomatis menggunakan algoritma yang kuat (saat ini bcrypt) dan menambahkan garam untuk keamanan ekstra.

Untuk memverifikasi kata sandi terhadap hashnya, gunakan password_verify():

$password = "mySecurePassword123";
$hashed_password = password_hash($password, PASSWORD_DEFAULT);

if (password_verify($password, $hashed_password)) {
echo "Kata sandi benar!";
} else {
echo "Kata sandi salah.";
}

Output:

Kata sandi benar!

Metode ini lebih aman daripada membandingkan hash secara langsung, karena dirancang untuk kekebalan terhadap serangan timing.

Kesimpulan

Selamat! Anda telah mengambil langkah pertama ke dunia penyampanan dengan PHP. Ingat, penyampanan adalah proses satu arah - Anda tidak dapat "unhash" hash untuk mendapatkan masukan asli. Itu adalah yang membuatnya sangat berguna untuk tujuan keamanan.

Sekarang Anda teruskan perjalanan PHP Anda, Anda akan menemukan banyak penggunaan lain untuk penyampanan. Itu adalah konsep fundamental dalam ilmu komputer dan keamanan maya, jadi memahaminya akan membantu Anda dalam karier pemrograman Anda.

Terus latihan, tetap bersemangat, dan selamat penyampanan!

Credits: Image by storyset