相关疑难解决方法(0)

为什么在bcrypt中比较密码是否正确需要盐?

我想在将数据存储到数据库之前使用node.js bcrypt来哈希密码.

此链接提供文档. https://github.com/kelektiv/node.bcrypt.js

以下是散列密码的示例.

var bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';

var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);
// Store hash in your password DB.
Run Code Online (Sandbox Code Playgroud)

这是检查密码的代码.

// Load hash from your password DB.
bcrypt.compareSync(myPlaintextPassword, hash); // true
Run Code Online (Sandbox Code Playgroud)

这是我不明白的.在bcrypt.compareSync,为什么没有参数salt?由于散列是从salt生成的,为什么比较明文密码不涉及散列中使用的原始盐?

encryption bcrypt password-encryption node.js

5
推荐指数
1
解决办法
649
查看次数

在 Spring 中使用 BCryptPasswordEncoder 检索密码盐

似乎org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder没有返回生成的密码 salt

public String encode(CharSequence rawPassword) {
    String salt;
    if(this.strength > 0) {
        if(this.random != null) {
            salt = BCrypt.gensalt(this.strength, this.random);
        } else {
            salt = BCrypt.gensalt(this.strength);
        }
    } else {
        salt = BCrypt.gensalt();
    }

    return BCrypt.hashpw(rawPassword.toString(), salt);
}
Run Code Online (Sandbox Code Playgroud)

问题:这是为什么目的而设计的?如何使用它,因为它不返回应该存储用于密码检查的salt

java spring spring-security password-encryption

4
推荐指数
1
解决办法
5469
查看次数

在FOS用户创建时,列'salt'不能为空

它工作了一段时间,但现在由于某种原因它产生了异常.我有自定义用户实体,它扩展了FOS用户:

namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
...
}
Run Code Online (Sandbox Code Playgroud)

我的自定义类中没有setSalt().正如我在转储SQL查询中看到的那样,其他非自定义字段(email_canonical,enabled,password,...)设置正确.我还能检查什么?

UPDATE

我做了作曲家更新.这是我的composer.json

"require": {
    "php": ">=5.5.9",
    "symfony/symfony": "3.2.*",
    "doctrine/orm": "^2.5",
    "doctrine/doctrine-bundle": "^1.6",
    "doctrine/doctrine-cache-bundle": "^1.2",
    "symfony/swiftmailer-bundle": "^2.3",
    "symfony/monolog-bundle": "^2.8",
    "symfony/polyfill-apcu": "^1.0",
    "sensio/distribution-bundle": "^5.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "incenteev/composer-parameter-handler": "^2.0",
    "friendsofsymfony/user-bundle": "~2.0@dev",
    "hwi/oauth-bundle": "^0.5.1",
    "twig/extensions": "^1.4"
},
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm fosuserbundle

3
推荐指数
1
解决办法
1820
查看次数

每次使用相同的输入进行Bcrypt加密都不同

使用golang.org/x/crypto/bcrypt和GORM(http://gorm.io/docs/)我正在尝试加密密码。问题在于,每种加密方式每次都不同,因此它永远无法与数据库中的加密方式匹配。

var result []string

password := []byte(data.Password)
encryptedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) // different every time

db.Where(&User{Username: strings.ToLower(data.Username)}).First(&user).Pluck("password", &result)
encryptionErr := bcrypt.CompareHashAndPassword(encryptedPassword, []byte(result[0]))

if encryptionErr == nil { // passwords match! }
Run Code Online (Sandbox Code Playgroud)

我已经确认每次输入都是相同的,并且数据库提供的密码是正确的。

我在这里做错了什么?

go

3
推荐指数
2
解决办法
1147
查看次数

Symfony / FOSuserBundle:盐是否为空?

我正在使用 :

  • Symfony的3.4
  • FOSUserBundle 2

FOSuserbundle安装得很好,并且就像一个护身符。我注意到在数据库中的用户表中,“盐”列始终为空:

在此处输入图片说明

以下是我的security.yml文件的摘录:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt
Run Code Online (Sandbox Code Playgroud)

为了记录,我添加了2个用户,并添加了命令“ fos:user:create”。

这正常吗?

symfony fosuserbundle symfony-3.4

1
推荐指数
1
解决办法
794
查看次数

如何验证密码

在此代码中,第一个函数Findaccount()将在数据库中查找电子邮件地址和以哈希形式存在的密码。所以CompareHashAndPassword()比较哈希和密码。

现在在handler.go文件中,我调用loginData()了一个允许用户登录的函数。我在这里遇到了问题。我调用了database.Findaccount(email, password, hash)函数,但它只是验证电子邮件地址,不验证 正确的密码,并给我false消息。

但是如果我这样调用函数database.Findaccount(email, "1234", hash),它会同时验证电子邮件和密码。

如何解决这个问题,因为我将无法记住每个密码。

数据库

func Findaccount(myEmail, myPassword, hash string) bool {
    collection := Connect.Database("WebApp2").Collection("dataStored")
    if err := collection.FindOne(context.TODO(), bson.M{"email": myEmail}).Decode(&Account); err != nil {
        fmt.Println("Enter the correct email or password")
    }
    err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(myPassword))
    return err == nil
}
Run Code Online (Sandbox Code Playgroud)

处理程序

func HashPassword(password string) (string, error) {
    bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
    return string(bytes), err
}

func loginData(w http.ResponseWriter, …
Run Code Online (Sandbox Code Playgroud)

passwords go

0
推荐指数
1
解决办法
70
查看次数