Я работаю над веб-приложением. Для того, чтобы иметь sh пароли, я использовал следующие логики c
package core
import (
"math/rand"
"golang.org/x/crypto/bcrypt"
)
type User struct {
Username string `json:"username"`
Password string `json:"password"`
}
type Hasher interface {
HashPassword()
}
func (u *User) HashPassword() {
cost := rand.Intn(28) + 4
//TODO: Handle error
hashedPassword, _ := bcrypt.GenerateFromPassword([]byte(u.Password), cost)
u.Password = string(hashedPassword)
}
Затем при обработке запросов
func HandleRegister(w http.ResponseWriter, r *http.Request) {
var user core.User
var hasher core.Hasher
hasher = &user
//TODO: Handle error
_ = json.NewDecoder(r.Body).Decode(&user)
hasher.HashPassword()
fmt.Println(user)
}
Я использую случайные затраты для хеширования в целях безопасности. Проблема в том, что, когда стоимость стала большой, процесс действительно замедлился. Я использую Postman
для отправки запроса на мой сервер, но это очень медленно. Почему это так? Моя реализация неверна?
Примечание: В моей базе данных SQLite я выбираю тип TEXT
для столбца пароля для хранения хешированного пароля. Было бы лучше использовать тип BLOB
вместо TEXT
?