我在使用我的应用程序注册时使用jBCrypt库来哈希用户密码.
我正在使用基本哈希函数,使用salt,如下所示:
String pass = BCrypt.hashpw(rawPass, BCrypt.gensalt());
Run Code Online (Sandbox Code Playgroud)
我注意到在注册时挂了一到两分钟,并检查了调试器,确认BCrypt负责.
盐化密码真的需要那么多的处理能力吗?如果是这样,一个好的选择是将明文密码发送到服务器来散列它吗?我最初的想法就是在它发送到任何地方之前将其哈希.有任何想法吗?
C中至少有两个Bcrypt实现:
我应该使用哪一个作为新项目的基础?请注意,我不需要向后兼容性,因此我的选择将完全取决于哪个实现被认为是最新的和维护的.另外,我很好奇哪一个用作大多数非C语言绑定的基础.
我使用nodejs bcrypt库来获得更好的密码保护.
我不确定我究竟该如何使用它,但到目前为止我得到了这个:
//A module containing this login function:
login: function(credentials,req,res) {
//"credentials" is containing email and password from login form
var query = 'SELECT password, email FROM users WHERE email = ? LIMIT 1';
client.query(query,[credentials.email], function(err, results) {
if (results[0]) {
//Compare passwords
if (bcrypt.compareSync(credentials.password, results[0].password)) {
//Set session data and redirect to restricted area
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我删除了示例中的所有错误处理,以便更容易阅读代码.
1.这工作,我能够登录和设置会话.但这就是它的全部吗?我错过了什么吗?
2.生成哈希时看起来就像密码前面有盐一样.我不得不在db中保存盐吗?
任何帮助赞赏
我目前正在尝试在node.js中为我的项目创建身份验证模块?
我已经看到了一些使用bcrypt生成哈希的例子,即
https://github.com/bnoguchi/mongoose-auth/blob/master/lib/modules/password/plugin.js https://github.com/Turbo87/locomotive-passport-boilerplate/blob/master/app/models /account.js
但是,出于某种原因,他们使用的是bcrypt.hashSync()函数.由于bcrypt是好的,因为它很耗时,为了不阻塞代码,使用异步函数不是更明智的,即:
User.virtual('password')
.get( function () {
return this.hash;
})
.set( function (password) {
bcrypt.hash('password', 10, function(err, hash) {
this.hash = hash;
});
});
Run Code Online (Sandbox Code Playgroud)
能否请您解释一下哪种方式更好,为什么?谢谢!
我很困难,试图让我的密码成功地与使用节点的bcrypt进行比较.也许我错过了一些东西,但在创建帐户时,我在注册方法中执行以下操作(某些代码缩写):
bcrypt.genSalt(10, function(err, salt) {
if(err) {
}
bcrypt.hash(user.Password, salt, function(err, hash) {
console.log('hashing and saving');
db.query(db insert code, function (error, rows, fields) {
if(error) {
console.log(error);
res.setHeader('500', { 'Content-Type': 'x-application/json'});
res.send({UserId: 0, ErrorMessage: 'Something terrible happened.'});
} else {
console.log('User created : ' + rows.insertId);
res.setHeader('200', { 'Content-Type': 'x-application/json'});
res.send({UserId: rows.insertId});
}
});
});
});
return next();
Run Code Online (Sandbox Code Playgroud)
一切正常.我的数据库有加密密码.但是当用户登录时,我无法从bcrypt.compare获得成功结果:
db.query(get account code, function(error, rows, fields) {
if(rows.length == 1) {
bcrypt.compare(request.params.password, rows[0].Password, function(err,res) {
if(err) { console.log(err.toString()); }
if(res == …Run Code Online (Sandbox Code Playgroud) 我想创建一个函数或类似Cron的东西,它执行链接(在Laravel中),类似于密码.我有两个解决方案.但哪一个更好用:
选项1(哈希):
<?php
// Page 1
$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);
// <-- Insert go to page and send GET with $key code here
// Page 2
$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);
if ($key == $pageOneKey) {
// Execute some code
}
Run Code Online (Sandbox Code Playgroud)
选项2(bcrypt):
<?php
// Page 1
$key = Crypt::encrypt(date('Y-m-d'));
// <-- Insert go to page and send GET with $key code here
// Page 2
$key = date('Y-m-d');
$pageOneKey = Crypt::decrypt($key);
if ($key == $pageOneKey) …Run Code Online (Sandbox Code Playgroud) 我加密用户的密码并保存到db.然后到用户登录,比较哈希密码和普通密码,我收到crypto/bcrypt: hashedPassword is not the hash of the given password错误.怎么了 ?
func encryptPassword(password string) (string, error) {
bytePass := []byte(password)
hashedPassword, err := bcrypt.GenerateFromPassword(bytePass, bcrypt.DefaultCost)
if err != nil {
log.Printf("ERROR:EncryptPassword: %s", err.Error())
}
return string(hashedPassword), err
}
func (i *Impl) Register(user User) bool {
hashedPass, err := encryptPassword(user.Password)
if err != nil {
return false
}
user.Password = hashedPass
if err := i.DB.Create(&user).Error; err != nil {
log.Printf("ERROR:Register: %s", err.Error())
return false
}
return true
}
func …Run Code Online (Sandbox Code Playgroud) 我克隆了一个使用'bcrypt'模块的sails项目,当我尝试使用命令安装它时 -
npm install --save bcrypt
Run Code Online (Sandbox Code Playgroud)
但它给了我以下错误!!!.我也使用npm版本@ 3.6.0和节点版本@ 5.6.0.Am无法解决此错误如下所示:
> bcrypt@0.8.5 install C:\Users\vikas\Documents\batua-web\node_modules\bcrypt
> node-gyp rebuild
> C:\Users\vikas\Documents\batua-web\node_modules\bcrypt>if not defined npm_config_node_gyp (node "C:\Program Files (x86)\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild )Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
> C:\Users\vikas\Documents\batua-web\node_modules\bcrypt\build\bcrypt_lib.vcxproj(20,3): error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
> gyp …Run Code Online (Sandbox Code Playgroud) 我正在处理带有$2y哈希的旧数据库.我已经挖了一下这个,也偶然发现堆栈溢出$2a和之间的区别$2y.
我查看了bcrypt似乎生成并仅比较$2a哈希的节点模块.
我找到了一个生成$2y哈希的网站,所以我可以测试它们bcrypt.
这是一个$2y字符串哈希的例子helloworld.
helloworld:$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW
Run Code Online (Sandbox Code Playgroud)
似乎模块无法验证$2y哈希值.
这是我的考试.
var Promise = require('bluebird')
var bcrypt = require('bcrypt')
var string = 'helloworld'
Promise.promisifyAll(bcrypt)
// bcrypt.genSalt(10, function(err, salt) {
// bcrypt.hash(string, salt, function(err, hash) {
// console.log(hash)
// })
// })
var hashesGeneratedUsingBcryptModule = [
'$2a$10$6ppmIdlNEPwxWJskPaQ7l.d2fblh.GO6JomzrcpiD/hxGPOXA3Bsq',
'$2a$10$YmpoYCDHzdAPMbd9B8l48.hkSnylnAPbOym367FKIEPa0ixY.o4b.',
'$2a$10$Xfy3OPurrZEmbmmO0x1wGuFMdRTlmOgEMS0geg4wTj1vKcvXXjk06',
'$2a$10$mYgwmdPZjiEncp7Yh5UB1uyPkoyavxrYcOIzzY4mzSniGpI9RbhL.',
'$2a$10$dkBVTe2A2DAn24PUq1GZYe7AqL8WQqwOi8ZWBJAauOg60sk44DkOC'
]
var hashesGeneratedUsingAspirineDotOrg = [
'$2y$10$MKgpAXLJkwx5tpijWX99Qek2gf/irwvp5iSfxuFoDswIjMIbj2.Ma',
'$2y$10$tRM7x9gGKhcAmpeqKEdhj.qRWCr4qoV1FU9se0Crx2hkMVNL2ktEW'
]
var …Run Code Online (Sandbox Code Playgroud) 在MySQL中搜索存储BCrypt哈希的正确方法我发现了这个问题,这只会让我更加困惑.
接受的答案指出我们应该使用:
CHAR(60) BINARY or BINARY(60)
但是评论中的其他人认为我们应该使用:
CHAR(60) CHARACTER SET latin1 COLLATE latin1_bin
甚至:
COLLATE latin1_general_cs
我不是数据库的专家,所以任何人都可以解释我所有这些选项之间的区别,哪一个真的更适合存储BCrypt哈希?
bcrypt ×10
node.js ×5
hash ×3
javascript ×3
mysql ×2
android ×1
asynchronous ×1
c ×1
cryptography ×1
go ×1
java ×1
jbcrypt ×1
laravel ×1
npm ×1
npm-install ×1
passwords ×1
php ×1
sails.js ×1
security ×1