Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kami Boleh Menjana Semua Kata Laluan Yang Mungkin dalam Panjang Tertentu dengan Cekap?

Bagaimanakah Kami Boleh Menjana Semua Kata Laluan Yang Mungkin dalam Panjang Tertentu dengan Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 13:17:10533semak imbas

How Can We Efficiently Generate All Possible Passwords of a Given Length?

Menghasilkan Semua Kemungkinan Kata Laluan dalam Panjang Tertentu dengan Cekap

Apabila cuba untuk meretas kata laluan secara kasar, adalah penting untuk menjana semua kombinasi yang mungkin dengan cekap . Untuk mencapai matlamat ini, kami akan meneroka pendekatan yang mengelak daripada menyimpan semua kata laluan dalam ingatan secara serentak dan membenarkan panjang kata laluan berubah-ubah.

N-ary Cartesian Product

Tugas di tangan melibatkan penjanaan produk Cartesian n-ary bagi satu set dengan dirinya sendiri. Pertimbangkan masalah menjana semua kata laluan 3 aksara menggunakan aksara 'a' dan 'b' dengan n = 3.

Pembinaan Berulang

Kami boleh membina secara berulang yang dikehendaki produk dengan terlebih dahulu mendapatkan produk n-1, kemudian menambah setiap elemen set awal pada setiap satu produk.

Contoh dengan Dua Aksara

Untuk menggambarkan konsep ini, mari kita pertimbangkan proses menjana semua kata laluan 3 aksara daripada set {a, b}:

  • produk 2 aksara: {ab}
  • 3 aksara produk: {(a,a,a),(a,a,b),(a,b,a),(a,b,b),(b,a,a),(b,a,b) ,(b,b,a),(b,b,b)}

Pelaksanaan dalam Go

Fungsi Go berikut melaksanakan pembinaan berulang teknik:

func NAryProduct(input string, n int) []string {
    if n <= 0 {
        return nil
    }

    prod := make([]string, len(input))
    for i, char := range input {
        prod[i] = string(char)
    }

    for i := 1; i < n; i++ {
        next := make([]string, 0, len(input)*len(prod))
        for _, word := range prod {
            for _, char := range input {
                next = append(next, word + string(char))
            }
        }
        prod = next
    }

    return prod
}

Pengoptimuman Prestasi

Penyelesaian yang dibentangkan mempunyai ruang untuk penambahbaikan jika menjana kata laluan pelbagai panjang diperlukan. Untuk mengelakkan pengiraan semula, anda boleh mengubah suai kod untuk mengambil produk (n-m) arbitrari dan memperoleh produk n-ary secara rekursif.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menjana Semua Kata Laluan Yang Mungkin dalam Panjang Tertentu dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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