Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencapai Kesetaraan Fungsi crypt() PHP untuk CRYPT_BLOWFISH dalam Go?
Soalan:
Bagaimanakah fungsi Go boleh dibuat untuk meniru gelagat fungsi crypt() PHP untuk rentetan input tertentu, di mana crypt() PHP dengan CRYPT_BLOWFISH menghasilkan penilaian benar?
Percubaan dan Hasil Jangkaan:
Percubaan telah dilakukan dibuat untuk mencapai ini, tetapi tidak berjaya:
Hasil yang diingini ialah untuk fungsi Go crypt() untuk menilai dengan betul rentetan "masukkan-kata laluan baharu" dan "$2a$09$f5561d2634fb28a969fb28a969f2dO8fjPjPjQ70/4QpjPjQC70/4QpjPjQC700f. .8jgmtzZP2" kepada benar, seperti crypt() PHP().
Penyelesaian:
Walaupun crypt() PHP yang setara dalam Go tidak ditemui, alternatif penyelesaian telah dilaksanakan:
<code class="go">import "golang.org/x/crypto/bcrypt" check := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"), []byte("enter-new-password")) if check == nil { fmt.Println("Passwords match") } else { fmt.Println("Passwords don't match") }</code>
Pendekatan ini menggunakan modul golang.org/x/crypto/bcrypt untuk membandingkan kata laluan yang disediakan dengan nilai cincang yang disimpan. Fungsi CompareHashAndPassword() mengembalikan sifar jika kata laluan sepadan dan ralat sebaliknya.
Nota Tambahan:
Adalah penting untuk ambil perhatian bahawa fungsi crypt PHP menawarkan berbilang algoritma pencincangan, termasuk sha256, sha512 dan blowfish. Dalam Go, modul berbeza selalunya diperlukan untuk mengendalikan algoritma tertentu. Dalam kes ini, pencincangan jenis blowfish yang digunakan dalam contoh PHP tidak disokong secara asli oleh mana-mana modul Go yang dicuba. Oleh itu, modul bcrypt telah digunakan.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kesetaraan Fungsi crypt() PHP untuk CRYPT_BLOWFISH dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!