в качестве префикса к значению хеша предлагается использовать хэш типа Blowfish. Некоторые из моих предыдущих попыток не учитывали это. Фактически, модуль в попытке 3 не имеет поддержки blowfish.

трока кода в PHP оценивается как true

echo '$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2' == crypt("enter-new-password",'$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2');

Что мне нужно, так это криптовая функция на Голанге, которая также оценивает как истинную.

ПОПЫТКА 1

Я пытался это, но это оценивается как ложное:

import "github.com/nyarla/go-crypt"
log.Println("$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2" == crypt.Crypt("enter-new-password","$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2"))

ПОПЫТКА 2

Я также попытался определить и использовать эту функцию crypt, которую я нашел где-то еще, но она также вернула false:

package main

import (
    "fmt"
    "unsafe"
)

// #cgo LDFLAGS: -lcrypt
// #define _GNU_SOURCE
// #include <crypt.h>
// #include <stdlib.h>
import "C"

// crypt wraps C library crypt_r
func crypt(key, salt string) string {
    data := C.struct_crypt_data{}
    ckey := C.CString(key)
    csalt := C.CString(salt)
    out := C.GoString(C.crypt_r(ckey, csalt, &data))
    C.free(unsafe.Pointer(ckey))
    C.free(unsafe.Pointer(csalt))
    return out
}

ПОПЫТКА 3

Я также попробовал это, но, похоже, он не поддерживает CRYPT_BLOWFISH, который использовался в более раннем PHP5.3 и более ранних версиях:

Почему мой пакет crypt выдает ошибку неправильного магического префикса?

Итак, мой вопрос:

Как заставить функцию крипта golang вести себя точно так же, как функция крипта PHP для строкenter-new-password а также$2a$09$f5561d2634fb28a969f2dO8QeQ70f4bjCnF/.GvPpjj.8jgmtzZP2?

Ответы на вопрос(1)

Ваш ответ на вопрос