Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencapai Kesetaraan Fungsi crypt() PHP untuk CRYPT_BLOWFISH dalam Go?

Bagaimana untuk Mencapai Kesetaraan Fungsi crypt() PHP untuk CRYPT_BLOWFISH dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-27 15:38:29874semak imbas

 How to Achieve PHP's crypt() Function Equivalence for CRYPT_BLOWFISH in Go?

Fungsi PHP crypt() Setara 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:

  • Percubaan 1:
    Menggunakan modul github.com/nyarla/go-crypt, hasilnya adalah palsu.
  • Percubaan 2:
    Mencipta fungsi crypt tersuai menggunakan interop C juga mengakibatkan palsu.
  • Percubaan 3:
    Satu lagi modul Go telah dicuba tetapi tidak mempunyai sokongan untuk CRYPT_BLOWFISH.

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!

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