PHP's crypt() function menawarkan pelbagai kaedah pencincangan, termasuk blowfish. Percubaan untuk meniru kelakuannya di Golang telah terbukti mencabar kerana ketiadaan padanan langsung.
Penyelesaian Alternatif
Walaupun kekurangan crypt() Golang yang setara , alternatif yang berkesan tersedia menggunakan pakej golang.org/x/crypto/bcrypt. Coretan kod berikut memberikan contoh:
<code class="go">import "golang.org/x/crypto/bcrypt" // Check whether the bcrypt version of "enter-new-password" matches "a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2". check := bcrypt.CompareHashAndPassword([]byte("a$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"), []byte("enter-new-password")) log.Println(check)</code>
Jika cincangan bcrypt bagi "masukkan-kata laluan baharu" sepadan dengan cincang yang disediakan, semak akan menjadi sifar. Jika tidak, semakan akan ditetapkan kepada objek ralat.
Pertimbangan
Fungsi crypt() PHP menyokong pelbagai algoritma pencincangan, seperti sha256, sha512 dan blowfish. Di Golang, adalah perlu untuk menyatakan secara eksplisit jenis cincang, kos dan parameter lain.
Awalan $2a$ dalam cincang yang disediakan mencadangkan penggunaan algoritma berasaskan blowfish. Beberapa percubaan awal untuk penyelesaian tidak mengambil kira perkara ini, yang membawa kepada keputusan yang salah.
Fail golang.org/x/crypto/bcrypt/bcrypt_test.go menawarkan contoh tambahan tentang cara memanfaatkan pakej ini dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kefungsian crypt() PHP dengan Blowfish di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!