Rumah > pembangunan bahagian belakang > Tutorial Python > Algoritma Bcrypt untuk Pencincangan Kata Laluan Selamat

Algoritma Bcrypt untuk Pencincangan Kata Laluan Selamat

Patricia Arquette
Lepaskan: 2024-12-16 03:34:10
asal
265 orang telah melayarinya

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.

The Bcrypt Algorithm for Secure Password Hashing

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

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.

Cara Bcrypt Berfungsi

  1. Menghasilkan Garam:
    Bcrypt menjana garam rawak sepanjang 16 bait dan biasanya dalam format Base64.

  2. 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.

  3. Format dan Panjang Bcrypt Hash:

 y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
Salin selepas log masuk
Salin selepas log masuk

Rentetan yang diberikan terdiri daripada:

  • $2y$: versi bcrypt
  • 12 ialah faktor kos (2^12 pusingan)
  • 22 aksara seterusnya (odwBFokG9vTK/BAaRXKKl.) ialah garam berkod Base64
  • Aksara yang tinggal ialah cincangan kata laluan dan garam yang dikodkan Base64.

Python Pelaksanaan Algoritma Bcrypt

Ketergantungan yang Diperlukan

import hashlib
import os
import base64
Salin selepas log masuk
Salin selepas log masuk

Permulaan Kelas

class Bcrypt:
    def __init__(self, rounds=12, salt_length=22):
        self.rounds = rounds
        self.salt_length = salt_length
Salin selepas log masuk
Salin selepas log masuk
  • Kelas Bcrypt merangkumkan fungsi untuk mencincang dan mengesahkan kata laluan

  • Parameter:

Menghasilkan Garam

 y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
Salin selepas log masuk
Salin selepas log masuk

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.

Hashing Kata Laluan

import hashlib
import os
import base64
Salin selepas log masuk
Salin selepas log masuk
  • 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.

Kod:

class Bcrypt:
    def __init__(self, rounds=12, salt_length=22):
        self.rounds = rounds
        self.salt_length = salt_length
Salin selepas log masuk
Salin selepas log masuk

Output:

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]
Salin selepas log masuk

Atas ialah kandungan terperinci Algoritma Bcrypt untuk Pencincangan Kata Laluan Selamat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan