Hashing ialah fungsi kriptografi yang tidak boleh diterbalikkan. Ia memerlukan input saiz rawak untuk menghasilkan nilai saiz tetap. Nilai saiz tetap ini dipanggil nilai cincang dan fungsi kriptografi dipanggil fungsi pencincangan. Hashing mempunyai sifat yang konsisten dan boleh diramal, bermakna input yang sama akan sentiasa menghasilkan nilai hash yang sama. Ia juga mempamerkan kesan longsor , yang bermakna walaupun sedikit perubahan dalam input menghasilkan nilai cincang yang berbeza secara drastik, memastikan keselamatan dan ketidakpastian yang tinggi.
Pencincangan selalunya menggunakan pencincangan masin, di mana rentetan rawak unik yang dipanggil garam ditambahkan pada input sebelum pencincangan, menjadikan setiap cincang unik walaupun untuk input yang sama
Pencincangan masin digunakan terutamanya dalam pencincangan kata laluan. Salah satu algoritma sedemikian ialah algoritma bcrypt.
Algoritma Bcrypt adalah berdasarkan algoritma penyulitan Blowfish. bcrypt menjana garam (rentetan rawak) yang unik untuk setiap kata laluan, dan kemudian garam digabungkan dengan kata laluan sebelum pencincang . Ini menjadikan Bcrypt tahan terhadap serangan kekerasan.
Menghasilkan Garam:
Bcrypt menjana garam rawak sepanjang 16 bait dan biasanya dalam format Base64.
Mencincang rentetan yang diberikan:
Garam digabungkan dengan kata laluan, dan rentetan yang terhasil disalurkan melalui algoritma penyulitan Blowfish. bcrypt menggunakan berbilang pusingan pencincangan yang ditakrifkan oleh faktor kerja. Bilangan pusingan yang tinggi menjadikannya mahal dari segi pengiraan, yang meningkatkan daya tahannya terhadap serangan kekerasan.
Faktor kerja, juga dikenali sebagai kos, ditakrifkan oleh nilai logaritma 2. Jika kos ialah 12, ini bermakna 2^12 pusingan. Lebih tinggi faktor kos, lebih banyak masa yang diperlukan untuk menghasilkan cincangan, yang seterusnya menyukarkan penyerang untuk memaksa kata laluan secara kasar.
Format dan Panjang Bcrypt Hash:
y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
Rentetan yang diberikan terdiri daripada:
import hashlib import os import base64
class Bcrypt: def __init__(self, rounds=12, salt_length=22): self.rounds = rounds self.salt_length = salt_length
Kelas Bcrypt merangkumkan fungsi untuk mencincang dan mengesahkan kata laluan
Parameter:
y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
Fungsi generate_salt mencipta garam rawak, yang akan menjadi nilai unik yang akan ditambahkan pada kata laluan untuk memastikan kata laluan yang sama menghasilkan cincang yang berbeza.
import hashlib import os import base64
Fungsi bcrypt_hash mencincang kata laluan dengan selamat dengan faktor garam dan kos yang disediakan.
dan Fungsi kata laluan_hash menjana cincang selamat untuk kata laluan yang diberikan dengan garam rawak.
class Bcrypt: def __init__(self, rounds=12, salt_length=22): self.rounds = rounds self.salt_length = salt_length
def generate_salt(self, salt_length=None): if salt_length is None: salt_length = self.salt_length return base64.b64encode(os.urandom(salt_length)).decode('utf-8')[:salt_length]
Atas ialah kandungan terperinci Algoritma Bcrypt untuk Pencincangan Kata Laluan Selamat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!