标签: bcrypt

是否有可用于Delphi的bcrypt实现?

我正在尝试找到一个bcrypt可以在Delphi中使用的实现.关于Googling给我带来的唯一有用的东西就是这个下载页面,其中包含一个叫做winapi单元的翻译标题bcrypt.h.但是,当我查看它提供的功能时,bcrypt.h似乎实际上没有任何方式使用Blowfish算法来散列密码!

我在C中找到了一些bcrypt实现,我可以从中构建DLL并链接到它们,除了它们似乎都需要*nix或GCC特定的,所以这也不起作用!

这有点让我感到困扰.我认为找到一个实现很容易,但事实上似乎并非如此.有谁知道我可以在哪里买到一个?

delphi bcrypt

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

比较密码 BcryptJS

所以我试图建立一个非常基本的用户登录。我正在尝试创建一个用户,然后使用这些凭据登录并取回 JSON Web 令牌。我被卡住的地方是尝试比较密码然后发送响应。

脚步:

创建用户:

  1. 输入电子邮件和密码
  2. salt/hash 用户密码
  3. 将用户存入数据库
  4. 返回成功

登录

  1. 通过请求电子邮件值查找用户
  2. 如果找到比较密码
  3. 密码好发送 JSON Web 令牌

用户模型

email:{ 
  type: String,
  required: true,
  unique: true
},
password: {
  type: String,
  required: true
}
Run Code Online (Sandbox Code Playgroud)

用户路线

var express     = require('express');
var router      = express.Router();
var jwt         = require('jsonwebtoken');
var bcrypt      = require('bcryptjs');

// Create User
...
bcrypt.genSalt(10, function(err, salt) {
    bcrypt.hash("superSecret", salt, function(err, hash) {
      user.password = hash;
      user.save();
      res.json({success: true, message: 'Create user successful'});
    });
  });
...

// Login
... …
Run Code Online (Sandbox Code Playgroud)

javascript bcrypt node.js express

14
推荐指数
4
解决办法
6万
查看次数

Symfony2自定义密码编码器(bcrypt)

我编写了自己的密码编码器,它实现了PasswordEncoderInterface:

class BCryptPasswordEncoder implements PasswordEncoderInterface {
    protected $encoder;

    public function __construct(BCryptEncoder $encoder) {
        $this->encoder = $encoder;
    }

    public function encodePassword($raw, $salt) {
        return $this->encoder->encodeString($raw, $salt);
    }

    public function isPasswordValid($encoded, $raw, $salt) {
        return $this->encoder->encodeString($raw, $salt) == $encoded;
    }
}
Run Code Online (Sandbox Code Playgroud)

编码器注册为具有id的服务bcrypt.password.encoder.但我不知道,如何告诉symfony使用它.目前app/config/security.yml看起来像这样:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        neo4j:
          id: security.user.provider.neo4j
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        secured_area:
            provider: neo4j
            pattern:    ^/.*
            form_login:
                check_path: /login_check
                login_path: /login
            logout:
                path:   /logout …
Run Code Online (Sandbox Code Playgroud)

bcrypt symfony

13
推荐指数
2
解决办法
9224
查看次数

网络应用密码:bcrypt和SHA256(以及scrypt)

随着最近(例如LinkedIn)关于密码的讨论,我正在研究密码哈希实现.喝完两杯咖啡和早上读书后,我不再是一个密码学家了.我真的不想假装自己.

具体问题

  1. 使用整数唯一用户ID失败是否有效?(crypt()只使用16位?)

  2. 如果我只是一遍又一遍地在哈希上运行sha256(),直到一秒钟用完就能击败蛮力攻击?

  3. 如果我必须问这些问题我应该使用bcrypt吗?

讨论/说明:

目标很简单,如果我的用户的哈希密码被泄露了:

  1. 破解不会"容易"
  2. 破解一个密码不会暴露使用相同密码的其他用户).

我在#1中读到的是哈希计算必须是昂贵的 - 例如,计算一两秒或者可能需要一点或内存(以阻止硬件解密).

bcrypt有这个内置的,如果我理解正确的话,scrypt更具有前瞻性,并且包含最低内存使用要求.

但是,通过"重新散布"sha256()的结果,需要多次使用几秒钟,然后将最终循环计数与哈希值一起存储以便稍后检查提供的密码,这是一种同样有效的方法吗?

对于#2,为每个密码使用唯一的盐很重要.目前尚不清楚的是盐必须是随机的(或大的).如果目标是避免使用"mypassword"作为密码的每个人拥有相同的哈希,那么仅仅这样做是不够的?:

hash = sha256_hex( unique_user_id + user_supplied_password );
Run Code Online (Sandbox Code Playgroud)

甚至这个,虽然我不确定它会给我什么:

hash = sha256_hex( sha256( unique_user_id ) + user_supplied_password );
Run Code Online (Sandbox Code Playgroud)

使用用户ID可以看到的唯一好处,除了我知道它是唯一的,是避免必须保存盐与哈希.没有多大优势.使用用户的ID作为盐是否存在真正的问题?它没有完成#2吗?

我假设如果有人可以窃取我的用户的哈希密码,那么我必须假设他们可以得到他们想要的任何东西 - 包括生成哈希的源代码.那么,在散列之前向密码添加额外的随机字符串(相同的字符串)是否有任何好处?那是:

# app_wide_string = one-time generated, random 64 7-bit *character* string.
hash = sha256_hex( unique_user_id + app_wide_string + user_supplied_password );
Run Code Online (Sandbox Code Playgroud)

我已经看到了这个建议,但我不明白我从那个用户的盐中得到了什么.如果有人想强行攻击他们会知道"app_wide_string"并在运行他们的字典攻击时使用它,对吗?

如上所述,是否有充分的理由使用bcrypt滚动我自己?也许我问这些问题的理由足够了吗?

顺便说一句 - 我只是计算了我现有的散列函数和我的笔记本电脑,我每秒可以生成大约7000个哈希值.不太经常建议的一两秒钟.

一些相关链接:

使用sha256作为散列和使用用户ID进行腌制

SHA512与Blowfish和Bcrypt

用户密码盐的最佳长度是多少?

encryption passwords hash salt bcrypt

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

bcrypt错误:设计ruby 2.0和rails 4.0

当我尝试运行我的应用时,我一直收到此错误:

C:/ruby-2.0.0-p195-i386-mingw32/lib/ruby/gems/2.0.0/gems/activesupport-4.0.0.rc1 /lib/active_support/dependencies.rb:228:in`requirement':无法加载此类文件 - 2 .0/bcrypt_ext(LoadError)

任何接受者? - 我试图使用设计宝石进行基本的用户身份验证..

ruby gem ruby-on-rails bcrypt devise

13
推荐指数
3
解决办法
8265
查看次数

使用BCrypt和Sequelize Model

我正在尝试使用bcrypt-nodejs我的sequelize模型的包,并且想要遵循一个教程将哈希合并到我的模型中,但是我收到了一个错误generateHash.我似乎无法弄清楚这个问题.有没有更好的方法来加入bcrypt?

错误:

/Users/user/Desktop/Projects/node/app/app/models/user.js:26
User.methods.generateHash = function(password) {
                          ^
TypeError: Cannot set property 'generateHash' of undefined
    at module.exports (/Users/user/Desktop/Projects/node/app/app/models/user.js:26:27)
    at Sequelize.import (/Users/user/Desktop/Projects/node/app/node_modules/sequelize/lib/sequelize.js:641:30)
Run Code Online (Sandbox Code Playgroud)

模型:

var bcrypt = require("bcrypt-nodejs");

module.exports = function(sequelize, DataTypes) {

var User = sequelize.define('users', {
    annotation_id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    firstName: {
        type: DataTypes.DATE,
        field: 'first_name'
    },
    lastName: {
        type: DataTypes.DATE,
        field: 'last_name'
    },
    email: DataTypes.STRING,
    password: DataTypes.STRING,

}, {
    freezeTableName: true
});

User.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); …
Run Code Online (Sandbox Code Playgroud)

bcrypt node.js sequelize.js

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

将 bcrypt 添加到 package.json 时,如何使用 docker node alpine Image 解决“找不到任何要使用的 Python 安装”?

在我将 bcrypt 添加到我的 package.json 之前,一切正常。现在,我收到以下错误消息。

这是我的 package.json 的摘录:

  "dependencies": {
    "bcrypt": "3.0.6",
    "express": "^4.17.1",
    "mongodb": "^3.3.1",
    "nodemailer": "^6.3.0",
    "pm2": "^3.5.1",
    "redis": "^2.8.0",
    "xlsx": "^0.15.0"
  },
Run Code Online (Sandbox Code Playgroud)

这是我的 dockerfile。我正在使用官方节点高山图像。我想知道 alpine 是否已经安装了 phyton。

FROM node:13.5.0-alpine

WORKDIR /usr/app

COPY ./src .

RUN npm install
Run Code Online (Sandbox Code Playgroud)

我在运行 docker-compose 时收到此错误消息:

node-pre-gyp WARN Using request for node-pre-gyp https download
node-pre-gyp WARN Tried to download(404): https://github.com/kelektiv/node.bcrypt.js/releases/download/v3.0.6/bcrypt_lib-v3.0.6-node-v79-linux-x64-musl.tar.gz
node-pre-gyp WARN Pre-built binaries not found for bcrypt@3.0.6 and node@13.5.0 (node-v79 ABI, musl) (falling back to source compile with node-gyp)
gyp ERR! find …
Run Code Online (Sandbox Code Playgroud)

python bcrypt node.js docker alpine-linux

13
推荐指数
7
解决办法
4万
查看次数

与增加SHA迭代次数相比,bcrypt如何更具未来性证明?

我一直在研究bcrypt哈希,当然这个方案的一大好处是它的"适应性".但是,它是如何自适应的,而不仅仅是增加你对SHA-1哈希的迭代量?比如说,而不是SHA-1哈希值1000次,你将它增加到10,000次迭代.这不是达到了同样的目标吗?什么使bcrypt更具适应性?

security hash cryptography bcrypt

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

Ruby BCrypt哈希比较

我正在尝试使用Sinatra和BCrypt实现看似非常简单的身份验证方法,但很明显我错过了一些东西......

用户预先分配了一个临时密码,该密码以明文形式存储在数据库中.

我对临时密码进行身份验证,然后创建一个salt和password_hash并将它们作为字符串写入db(在本例中为mongo).

要进行身份验证,我从db和用户密码中获取salt以进行比较.

post "/password_reset" do
  user = User.first(:email => params[:email], :temp_password => params[:temp_password])
  if dealer != nil then
  password_salt = BCrypt::Engine.generate_salt
  password_hash = BCrypt::Engine.hash_secret(params[:password], password_salt)
  user.set(:password_hash => password_hash)
  user.set(:password_salt => password_salt)
  end
end

post "/auth" do
  @user = User.first(:email => params[:email])
  @user_hash = BCrypt::Password.new(@user.password_hash) #because the password_hash is  stored in the db as a string, I cast it as a BCrypt::Password for comparison
  if @user_hash == BCrypt::Engine.hash_secret(params[:password], @user.password_salt.to_s)   then
    auth = true
  else
    auth = false
  end
end …
Run Code Online (Sandbox Code Playgroud)

ruby bcrypt

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

bcrypt.checkpw返回TypeError:必须在检查之前编码Unicode对象

我打电话bcrypt.checkpw检查未加密的密码匹配与存储在凭证数据库中的散列密码,但接收

TypeError:必须在检查之前对Unicode对象进行编码

我该如何解决这个问题?有什么建议吗?
我安装了python 2.7.6,和bcrypt 3.1.1

我有以下代码:

def check_password(password, hashed_password)
    if not bcrypt.checkpw(password, hashed_password):
        raise InvalidCredentials("403 Forbidden")
    else:
        return true
Run Code Online (Sandbox Code Playgroud)

并收到以下错误:

文件"/home/qt/virtualenv/lib/python2.7/site-packages/bcrypt/ init .py",第100行,在checkpw
引发TypeError("Unicoed-objects必须在检查之前编码")
TypeError:Unicode-objects必须在检查前进行编码

我调查了一下bcrypt/__init__.py,但我不确定为什么

def checkpw(password, hashed_password):    
    if (isinstance(password, six.text_type) or            
        isinstance(hashed_password, six.text_type)):        
    raise TypeError("Unicode-objects must be encoded before checking")
Run Code Online (Sandbox Code Playgroud)

python bcrypt

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