- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在调整来自 this blogpost 的登录功能. User 结构(见下文)有四个字段,id、name、email 和 password。您可以在下面的数据库中看到一行。 login函数中的fmt.Println
显示用户查询数据库后是这样的
&{3 testuser $2a$10$hS7sth8jIBN2/IXFTWBibu3Ko5BXm9zHO5AJZRAbAOQ04uv.Gs5Ym [116 101 115 116 117 115 101 114 64 103 109 97 105 108 46 99 111 109]}
换句话说,它有 id
(3)、name
(testuser)、散列密码,还有一个让我吃惊的数字数组位,因为它不在数据库的行中(见下文)。您还会注意到 fmt.Println
没有显示电子邮件,即使它在数据库的行中可见,所以这里似乎有问题。
当 bcrypt 在 Login
函数中比较散列和密码时,它给我这个错误
hashedSecret too short to be a bcrypted password not auth
你能解释一下为什么会抛出这个错误吗?
func Login(password, email string) (u *User, err error) {
u = &User{}
err = db.QueryRow("select * from users where email=$1 ", email).Scan(&u.Id, &u.Name, &u.Password, &u.Email)
fmt.Println("u", u)
if err != nil {
fmt.Println("err", err)
}
err = bcrypt.CompareHashAndPassword(u.Password, []byte(password))
if err != nil {
u = nil
}
return
}
我有一个包含以下字段的用户结构
type User struct {
Id int
Name string
Email string
Password []byte
}
我像这样在 postgres 中为它创建了一个表
CREATE TABLE "public"."users" (
"id" int4 NOT NULL DEFAULT nextval('users_id_seq'::regclass),
"username" varchar(255) NOT NULL COLLATE "default",
"email" varchar(255) NOT NULL COLLATE "default",
"password" bytea
)
WITH (OIDS=FALSE);
这是数据库中的一行
id | username | email | password
----+------------+----------------------+----------------------------------------------------------------------------------------------------------------------------
3 | testuser | testuser@gmail.com | \x24326124313024685337737468386a49424e322f495846545742696275334b6f3542586d397a484f35414a5a524162414f51303475762e477335596d
最佳答案
数字数组是电子邮件地址。
package main
import (
"fmt"
)
func main() {
email := []byte{116, 101, 115, 116, 117, 115, 101, 114, 64, 103, 109, 97, 105, 108, 46, 99, 111, 109}
fmt.Println(email)
fmt.Println(string(email))
}
输出:
[116 101 115 116 117 115 101 114 64 103 109 97 105 108 46 99 111 109]
testuser@gmail.com
进一步研究后,我看到您有select *
。不要那样做!您得到数据库返回的项目,不一定是您想要的。始终在您要返回的字段及其顺序中明确说明。
从 select *
中,使用 CREATE TABLE
定义,您可能得到 id
、username
、电子邮件
和密码
。从您的 Scan
中,您将 User
类型 Id
设置为 id
,将 Name
设置为 username
,Password
到email
,Email
到password
。换句话说,u.Password
包含 email
(它们具有相同的 Go 数据类型)并且 email
太短而无法伪装成散列密码.
匹配select
和Scan
中的字段,例如
"select id, username, password, email from users where email=$1 "
Scan(&u.Id, &u.Name, &u.Password, &u.Email)
关于postgresql - hashedSecret 太短,不能成为 bcrypted 密码而不是 auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344109/
密码散列的理想 bcrypt 工作因素是什么。 如果我使用因子 10,则在我的笔记本电脑上对密码进行哈希处理大约需要 0.1 秒。如果我们最终得到一个非常繁忙的网站,那么仅仅检查人们的密码就会变成大量
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
好吧,经过大量研究,我决定使用 bcrypt(请随意评论)在我的 PhoneGap 应用程序中散列和存储密码。 几天前,我偶然发现了 Bcrypt.net,它对我来说似乎“足够好”(再次,请随意发表评
我是 Ruby on Rails 的初学者,正在尝试向 http://ruby.railstutorial.org/ 学习我正在创建 example_app,但卡在了第 6 章。 我的Ruby版本:r
我是 Ruby on Rails 的初学者,正在努力学习 http://ruby.railstutorial.org/我正在创建 sample_app,但卡在了第 6 章。 我的 Ruby 版本:ru
我正在 Spring Hibernate MVC 中从事 Web 应用程序项目。我在 Spring security 中使用 Bcrypt 算法将编码密码存储在数据库中。 现在我想要解码该编码密码以停
我正在使用 sails js 框架来开发 Web 应用程序,并且我尝试安装 bcrypt 节点模块来进行密码哈希处理。但它显示以下错误 除了安装 python 或 VS c++ redistribut
我收到错误 Cannot find module 'bcrypt' in nodejs application 我尝试使用 npm install bcrypt 安装它,但仍然遇到问题 npm i b
我有一个 python 脚本,它将用户数据导入到 mongodb 中,该 mongodb 使用 bcrypt 来哈希用户的密码。 来自 mongodb 的数据也将在 Node.js Web 应用程序中
我想使用 Go 创建一个用户身份验证系统,但我无法登录帐户。我使用 bcrypt 来散列密码,然后将其保存到数据库 (MySQL)。当我想将它与插入的密码进行比较时,就会出现问题。我有这个错误:has
我尝试创建Minecraft 插件(这是我的第一个),但无法修复此错误: 因此,该插件编译良好,但是当代码必须执行此代码时: BCrypt.checkpw(mdp, result.getString(
嗨,我最近在我的项目中使用了 bcrypt npm 包的 bcrypt.genSalt 。使用 bcrypt.genSalt 的基本思想是为需要加密的密码生成 Salt。使用 bcrypt.genSa
这听起来像是一个奇怪的问题,我实际上不得不问这个感觉有点奇怪,但是在花了几个小时查看 MSDN 文档以了解添加的 bcrypt 例程之后在 Vista 中,我几乎得出结论,没有实际的 bcrypt 支
我想在我的 grails 项目中使用 bcrypt 散列算法,而不是它的 defaultSHA-256 消息摘要算法。要启用 bcrypt,您只需使用 grails install-plugin sp
关于bcrypt npm package ,我看到推荐使用异步版本。但是,我想真正了解两个版本在性能方面的差异(即事件循环、阻塞 I/O 等) 版本 1:异步 const hash = await b
我有一个问题,我可以在 node-bcrypt 和passport.js 中创建散列密码,但无法使用散列密码。 我使用 nodejs、express、mongodb、mongoose、passport
我目前正在尝试在我的 Spring Security 中使用 LDAP 实现 BCrypt。我的问题是 LDAP 是否支持此功能,如果支持,我该如何实现?查看下图,我没有将 BCrypt 视为 LDA
我创建了一个新的 Lumen 5.4 项目并尝试播种一些数据。在播种机中,我使用 bcrypt 来散列密码。但是当我运行 php artisan db:seed 时,我得到了这个错误: Call to
当我将 has_secure_password 添加到模型(继承自 ActiveRecord::Base)时,出现错误,指出“bcrypt-ruby 不是 bundle 的一部分”。 这里的日志是:
请帮我弄清楚为什么我无法在运行 ubuntu 14.04 的系统中安装 bcrypt 错误: somehostname@somehost:~$ pip install bcyrpt Collectin
我是一名优秀的程序员,十分优秀!