问题是同一个标题,BCrypt使用$ 2x $?
以下情况是对的吗?
$2a$
当服务器PHP版本更早时,我们有一组已经使用前缀进行哈希处理的密码5.3.7
.现在我们将PHP升级到5.3.7+
,现在我们必须先用$2x$
算法验证以前的密码然后用$2y$
前缀重新密码.那就对了?
Ian*_*oyd 65
维基百科编辑注意:此答案中的内容属于公共领域; 我知道,因为我写了它.我首先为自己编写了它,然后将它放在Stackoverflow上.我也知道,因为Stackoverflow上的所有东西都是copyleft.即使不是这样,任何人都可以随时随地以任何理由随意使用它.我怎么知道?因为我写了它,我只是这么说.这包括维基百科上的Bcrypt条目.用维基百科的说法:我捐了它.
因此,当您不知道自己在谈论什么时,请停止声明侵犯版权.
$ 2 $
BCrypt是由OpenBSD人员设计的.它被设计为在OpenBSD密码文件中散列存储密码.散列密码与前缀一起存储,以标识所使用的算法.BCrypt得到了前缀$2$
.
这与其他算法前缀形成对比:
$1$
:MD5$5$
:SHA-256$6$
:SHA-512$ 2A $
原始BCrypt规范没有定义如何处理非ASCII字符,或者如何处理空终止符.修改了规范以指定散列字符串时:
$ 2x $,$ 2y $ (2011年6月)
在crypt_blowfish中发现了一个错误,这是BCrypt的PHP实现.它是第8位错误处理字符.
他们建议系统管理员更新他们现有的密码数据库,替换$2a$
为$2x$
,表示这些哈希值很差(并且需要使用旧的破坏算法).他们还建议让crypt_blowfish发出$2y$
由固定算法生成的哈希值.没有其他人,包括规范的OpenBSD,采用了2x
/ 的想法2y
.此版本标记仅限于crypt_blowfish.
$ 2x $和$ 2y $的版本不比$ 2a $ "更好"或"更强" .它们是BCrypt的一个特定错误实现的残余.
$ 2b $ (2014年2月)
在BCrypt的OpenBSD实现中发现了一个错误.他们把弦的长度存放在一个unsigned char
.如果密码长度超过255个字符,则会溢出并以255换行.
BCrypt是为OpenBSD创建的.当他们的库中有错误时,他们决定可以使用该版本.这意味着如果您想要保持最新的"他们的"规范,其他所有人都需要效仿.
版本$ 2b $并不比$ 2a $ "更好"或"更强" .它是BCrypt的一个特定错误实现的残余.但是由于BCrypt规范地属于OpenBSD,他们可以将版本标记更改为他们想要的任何内容.
2a,2x,2y和2b之间没有区别.如果您正确编写了实现,它们都会输出相同的结果.
如果你从一开始就做正确的事(存储UTF8串并散列空结束),则:有没有什么区别2,2A,2X,2Y和2B.如果您正确编写了实现,它们都会输出相同的结果.
唯一需要关心2x和2y的人是那些你可能一直在使用crypt_blowfish的人.唯一需要关心2b的人是那些可能一直在运行OpenBSD的人.
所有其他正确的实现都是相同和正确的.
归档时间: |
|
查看次数: |
8208 次 |
最近记录: |