发布
社区首页 >问答首页 >复制由bcrypt加密的密码

复制由bcrypt加密的密码
EN

Stack Overflow用户
提问于 2015-03-23 14:27:09
回答 2查看 1.2K关注 0票数 1

我用这样的方法存储我的密码

代码语言:javascript
代码运行次数:0
复制
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync('password', salt); //hash = $2a$10$MCNmLPkgiZ9jH9/0x4ZVJOvxYratODHJbcC6.X3vIDoxOfFwBYCpK

我想把我的数据库移到另一台机器上然后砰地一声!我所有的密码都错了

如果我在新机器上执行相同的代码,就会得到不同的哈希,这很重要吗?

代码语言:javascript
代码运行次数:0
复制
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync('password', salt); //hash = $2a$10$LLi4TyJ1oP69HQMkPpsExO4hinwW3SmURR0mqmB1ranCJX3ed5oDC
EN

回答 2

Stack Overflow用户

发布于 2015-03-23 14:46:32

那是故意的。检查密码的工作流不涉及生成新的salt,只在检查明文是否正确时使用现有salt。

来自维基百科密码盐

要理解破解单个密码和一组密码之间的区别,请考虑一个包含数百个用户名和密码的单一密码文件。如果没有salt,攻击者可以计算哈希(尝试),然后检查该哈希是否出现在文件中的任何位置。匹配的可能性,即使用该尝试破解一个密码,随着文件中密码的数量的增加而增加。如果存在盐类,则攻击者将不得不计算散列(Salta)。(尝试),在哪里“。”表示连接,与条目A进行比较,然后进行散列(Saltb)。与条目B进行比较,以此类推。这击败了试图破解多个密码的“重用”散列。

票数 0
EN

Stack Overflow用户

发布于 2015-03-23 14:51:42

理解变量salt

假设您的数据库将用户X的密码存储为hash('mypass')

入侵者得到他的手在你的数据库,并获得哈希密码。现在,他能够运行一个彩虹攻击,如果他的预先计算的彩虹表包含密码'mypass',他将很容易地找到什么密码用户X使用。

为了减轻风险,您可以将密码存储为hash('mypass' + 'SERVER_CONSTANT') --它完全击败了彩虹攻击,即使入侵者可以访问'SERVER_CONSTANT'。它现在是一个必需的标准,被称为食盐

bcrypt.genSalt(Sync)方法依赖于服务器硬件的独特属性生成盐分。对于每台计算机,genSalt是不同的(否则它就违背了Salt的目的)。

解决方案:

console.log(bcrypt.genSaltSync(10))在你的旧机器上。假设它是ABCDE

然后在你的新服务器上做:var salt = 'ABCDE'。使用常量而不是genSalt是安全的,但是您必须将它保持私有(远离公共存储库,等等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29212791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档