这是因为基于DES的crypt(AKA'descrypt')将密码截断为8个字节,并且仅出于密码验证的目的检查前8个字节。
这是您直接问题的答案,但是以下是您的上下文所暗示的一些一般性建议:
幸运的是,我的阅读,MD5
在/etc/login.defs
实际上是md5crypt($ 1 $),它们虽然有点过时,并宣布其作者过时,仍然是远远优于基于DES-crypt(已经和肯定好得多不是像普通的原料,不加盐哈希MD5!可以以数十亿每秒的速度在商品GPU上破解大多数未盐化的哈希值)
看起来SHA256
(实际上sha256crypt)和SHA512
(实际上sha512crypt)也在那里。我会选择其中之一。
如果password
在每种方案下都将密码设置为或,则可以直观地验证我的结论是-crypt变体是否正确(此处的示例摘自hashcat示例hash,全部为'hashcat',有些为可读性):
不推荐-无盐或旧式哈希类型,对于密码存储而言太“快”了(破解率):
MD5 - 8743b52063cd84097a65d1633f5c74f5
SHA256 - 127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935
SHA512 - 82a9dda829eb7f8ffe9fbe49e45d47d2dad9664fbb7adf72492e3c81ebd3e2 \
9134d9bc12212bf83c6840f10e8246b9db54a4859b7ccd0123d86e5872c1e5082f
descrypt - 48c/R8JAv757A
还行-比未加盐,没有截断要好得多,但不再足以抵抗现代硬件上的蛮力:
md5crypt - $1$28772684$iEwNOgGugqO9.bIz5sk8k/
更好-具有较大盐分和工作因子的相对较现代的哈希值:
sha256crypt - $5$rounds=5000$GX7BopJZJxPc/KEK$le16UF8I2Anb.rOrn22AUPWvzUETDGefUmAV8AZkGcD
sha512crypt - $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/
其中,只有解密在8处截断。最后两个是最好的选择。
(附带说明:上面的md5crypt和sha512crypt示例中的仅数字盐仅是hashcat如何创建示例哈希的副作用;真实,健康的盐通常是从更大的键空间中提取的)。
还要注意,我只列出了该平台上/etc/login.defs支持的哈希类型。对于一般用途,甚至sha256crypt和sha512crypt也已被取代-首先由bcrypt取代,然后由scrypt和Argon2系列之类的真正抗并行攻击的哈希取代。(但是请注意,对于应该在一秒钟之内完成的交互式登录,bcrypt实际上比后者更具抵抗力)