Авторизация на Golang
Доброго времени суток!
Столкнулся с проблемой авторизации на языке go
Выше прикрепил, как записываются данные в базу
Попадаю в ошибку, то что неправильный пароль.
Решил сделать кастомный код
password := "123456"
hash := "$2a$10$nNLEbRWp6EMnPOrc2symbe2TvW2/1SR6fezhv41yyNYef/OWjTTuO"
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
if err != nil {
fmt.Println(" Ошибка:", err)
} else {
fmt.Println("работает правильно!")
}
Но все равно попадаю в if
Пробовал спрашивать в чатГПТ
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ну в общем нельзя байты в обычную строку переводить через string(hashedPassword)
, там теряется какая-то информация из-за непечатных символов, локализации и т.д. Используйте пакет hex
для перевода в шестнадцатеричный вид и обратно, так ничего не потеряется:
package main
import (
"encoding/hex"
"fmt"
"golang.org/x/crypto/bcrypt"
)
func main() {
password := "123456"
hash, err := hex.DecodeString("243261243130245a306a74595059775741736e4950696f6b354e72472e3058777578325a484d57774762334155352e47714935474b5a72644b466247")
err = bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
if err != nil {
fmt.Println(" Ошибка:", err)
} else {
fmt.Println("работает правильно!")
}
Вывод:
работает правильно!
Кодирование хэша в такую строку: hex.EncodeToString(hashedPassword)