我正在或多或少地处于加密方面,花了几天时间,我需要帮助。
计划是向用户发送邮件,让他们登录,针对SHA1验证其密码,然后使用Bcrypt加密提供的密码,以替换现有密码。
我有一个“用户”表,其中包含由PHP中IonAuth和FlexiAuth的组合生成的密码,以及每个密码的相应盐值。
根据IonAuth的配置文件,密码应该为SHA1。
[我已经通过现有的Bcrypt方法运行了一个我所知道的SHA1加密密码,并且密码和带盐的密码也都为假,因此我至少取消了Bcrypt作为可能的算法。
因此,出于测试目的,我使用的是已知且有效用户名和密码。
我已经用Vue,Node,Express等重写了应用程序,并尝试:
let password = passwordHash.verify(providedPassword + user.salt, user.password)
console.log("Users:password", password)
…但是密码和加盐的密码都为假。
我正在为节点使用旧式passwordHash模块,因为我无法找到其他任何东西,并且我怀疑这会因为它的哈希字符串前面加上了“ sha1”而无法正常工作]
作为参考,“用户”表中的哈希密码字符串以“ $ 2a $ 08 $…”开头,而Bcrypt在Node中生成的密码字符串以“ $ 2a $ 10 $…”开头]
有什么想法吗?
我不知道你在问什么:
根据IonAuth的配置文件,密码应为SHA1。
好可以由他们决定。如果愿意,可以使用猪拉丁。
[我已经通过现有的Bcrypt方法运行了一个我所知道的SHA1加密密码,并且密码和带盐的密码也都为假,因此我至少取消了Bcrypt作为可能的算法。
SHA-1不是加密的;它是哈希。您是否通过bcrypt运行SHA-1 hashed密码?还是通过bcrypt运行password?
而且密码和加盐密码也都为假
你是什么意思盐? bcrypt提供盐。您不提供盐。好的,因此您消除了bcrypt。
但是有什么问题?您无法登录吗?您的基础框架无法验证自己的凭据?您收到验证错误吗?
简短版本:我no知道你在做什么。
但是
似乎您是在要求识别某人在某处生成的哈希密码。
两者:
$2a$08$…
$2a$10$…
绝对绝对是bcrypt。
第一个是成本系数为8
(即2 8]回合)的bcrypt。第二个是价格为10
(即2 10回合)的bcrypt。
无论是什么,都应该使用12的成本因数(以便花费约250ms的时间来产生。)>
因此,我将从消除此框架提供的所有杂项“ helpfully”
开始,并调用bcrypt。我不再使用javascript,也不知道这是什么bcrypt库。但是每个值得其盐分的bcrypt库都具有如下功能:
String hash = bcrypt.hashPassword("hunter2", 12);
和
Boolean passwordMatch = bcrypt.verifyPassword("hunter2", hash);
有人试图在密码后加盐的事实:
providedPassword + user.salt
绝对错误。
不管
如果没有别的:您显示的那些保存的字符串are
bcrypt。$1$
:基于MD5的加密('md5crypt')] >>$2$
:基于河豚的地穴('bcrypt')$2a$
:bcrypt;已更新为文档UTF8和空终止符$2b$
:bcrypt;由OpenBSD生成,而早期版本中没有错误$2x$
:由一个越野车php实现生成的bcrypt散列]$2y$
:由一个固定的php实现生成的bcrypt哈希]$sha1$
:基于SHA-1的加密('sha1crypt')] >>$5$
:基于SHA-256的crypt('sha256crypt')$6$
:基于SHA-512的crypt('sha512crypt')您说您已经淘汰了bcrypt。
我向您保证,bcrypt。
我建议您获得这个精美的框架,并直接使用bcrypt。确认可以正确后:
使用bcrypt的密码,然后您可以尝试调试此未公开的离子库。