Answers:
如果您的系统使用密码哈希来存储密码(例如MD5,SHA1等),则密码长度本身没有限制,因为可以使用任意数量的数据创建这些哈希。可以为整个硬盘驱动器创建MD5或SHA1哈希,这通常是出于取证目的,因为即使哪怕一次更改的比特数也很小,那么您将拥有非常不同的哈希,因此可以验证数据是否已更改。这意味着您可以使用这些完全相同的算法来测试数据是否被篡改。Linux(至少是当前的Linux)使用这些相同的哈希函数。它将要求您提供密码,然后它将创建您提供的密码的加密哈希,并查看该哈希是否与存储的密码匹配。
使用这些散列有一个小缺点,即散列具有有限的大小,例如MD5散列为128位。这意味着MD5哈希仅具有2^128
或340,282,366,920,938,463,463,374,607,431,768,211,456
可能的组合。现在,尽管这是一个很大的数字,这意味着您可以拥有所谓的哈希冲突,即您有两个产生相同哈希的不同项或键。从理论上讲,较大的按键尺寸,发生碰撞的概率较低的时间越长,应该采取蛮力密码,但被严格评估熵和多久CAN但是,即使是哈希冲突,他们尝试的第一个条目也可能是匹配的条目。一般而言,使用具有较大密钥大小的散列确实更安全,因为假设这是MD5,340,282,366,920,938,463,463,374,607,431,768,211,456
则极不可能出现第一个密码匹配的几率。也挑好密码,因为很多饼干会尝试和使用单词列表,名称列表,这些列表的突变(即,如果这个词是“鱼”,那么他们将尝试fish1234
,fish!@#$
等等),他们依靠暴力破解密码了。
判断系统是否使用加密哈希存储密码的方法是查看/etc/shadow
文件(假设您具有root用户访问权限)。每行的格式都类似于user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved
。密码字段可以以$num$
(例如$1$01234567$b5lh2mHyD2PdJjFfALlEz1
,密码字段中的md5哈希看起来像以开头$1$
)开头。如果以此开头,则意味着您的系统正在使用加密哈希。在所有现代系统上,密码字段的格式均为$id$salt$hash
。id指定您正在使用的加密哈希类型。该salt是随机生成的字符串,该字符串与密钥(纯文本密码)连接在一起,以防止对已知哈希值进行预先计算的表。哈希是根据盐和密钥/密码创建的密码哈希。如果您的密码字段以$num$
那么您正在使用加密哈希。
所以你知道,数字意味着:
$1$
表示您正在使用MD5$2$
或$2a$
表示您正在使用河豚$5$
表示您正在使用SHA-256$6$
表示您正在使用SHA-512SHA-512是glibc提供的最佳可用哈希。我不知道河豚有多强,但它不是glibc的一部分,因此仅在添加了它的某些发行版中可用。SHA-512会产生512位密钥或2 ^ 512种可能的组合,然后才能预期发生冲突,并且使用足够复杂的密码,这将导致一簇计算机花很长时间才能在哈希中找到实际密码或冲突。
另外,如果您的哈希码不以开头,$num$
则说明您使用的是DES,且哈希值限制为8个字符。我相信使用DES或至少其中一些使用DES的旧系统,他们将使用任何大小的密码,但仅使用前8个字符。这意味着,如果将密码设置为,mybigbigapple
并且有人使用该密码mybigbigcity
,则将允许他们输入密码,因为DES仅会使用mybigbig
,之后的任何内容都将被丢弃。
众所周知,2008年4月发布的Ubuntu 8.04及更高版本使用了MD5哈希。从2008年10月发布的8.10开始的Ubuntu,此后的所有版本都使用SHA-512哈希。我不知道在2008年4月之前走了多远,但我相信,即使不是几年,大多数发行版都使用散列。
当前的Ubuntu 12.04和14.04 LTS(长期支持版本)在默认情况下似乎使用SHA-512,可以$6$
在/ etc / shadow文件中的哈希开头看到:
catullus:$6$MsHYK60sqcv$BtDqVCMXibpqg[...]
现在,任何哈希算法允许的密钥或密码的长度并不是确定允许密码大小的唯一方法。另一个有趣的问题是程序的编写方式以及程序本身将支持的长度。所有现代的passwd程序,也许大多数是crypt(3)
Linux中的功能。crypt很长一段时间(因为至少使用了MD5,并且可能在此之前)允许实际指针使用字符指针。这意味着密钥接受时间的唯一限制是基于程序可以使用的内存量,但很可能比任何人都能记住的任何密码都要长得多(数百万个字符?)。
这应该回答您有关密码可以使用多长时间的问题。希望我能帮上忙。
参考文献:
根据密码的存储方式,MD5,SHA1,BlowFish等,我认为对存储方法本身设置的密码没有限制。
较旧的实现可能有8个或255个字符的限制。
这似乎确实是一个更适合www.serverfault.com的问题:)
passwd命令涉及用于加密的mcrypt命令。根据mcrypt的源代码,stdin的最大大小限制为512个字符(密码)-但这是两年前的...。-(我将在下几个小时更新此答案)...是的在目录src中的mcrypt 2.6.8中,有一个文件getpass.c-开始时您会看到将值512设置为静态char值。(我希望将其抽至1.4 GB ...):