您的位置:首页 > 运维架构 > Linux

关于MD5 32位和16位的区别以及linux /etc/shadow 文件详解

2017-12-21 14:08 543 查看



有人说md5,128位,32位,16位,到底md5多长?

md5的长度,默认为128bit,也就是128个0和1的二进制串。

这样表达是很不友好的。

所以将二进制转成了16进制,每4个bit表示一个16进制,

所以128/4 = 32 换成16进制表示后,为32位了。



 


为什么网上还有md5是16位的呢?

网上有很多帖子,md5 32位 16位 加密 区别。

仔细观察admin生成的32位和16位的md5值……

查询结果:

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

md5(admin,16) = 7a57a5a743894a0e

看出来了吧!

其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

下面就说说linux密码的问题!

   linux的root密码存在于“/etc/shadow”这个文件中,不过要有root权限才能在linux下看到“/etc/shadow”这个文件。我用自己的虚拟机做一个演示,如下图所示:





      上面这个图中,我没有设置root的密码,可以看到root那一行最开始有个“!”。接着看下面的图,已经设置了root密码:





      在这里,主要是对shadow密码存储结构做一些介绍,参考了一下网络上的相关内容,自己总结一下。<
4000
/span>

      密文字符串格式为:$id$salt$encrypted,通过$来分割,其中$id用来指定使用的算法,如下表格所示:

IDMethod
1MD5
2aBlowfish(not in mainline glibc;added in some Linux distribution)
5SHA-256(since glibc 2.7)
6SHA-512(since glibc 2.7)
      从我上面的截图可以看到,密文采用的是SHA-512算法。$salt是一个最多16个字符的随机生成的字符串,用来增加破解难度。$encrypted就是通过加密算法和salt算出来的密文。

      接下来,描述一下这个密码存储的结构。
账户名:账户名与/etc/passwd里面的账户名是一一对应的关系。
密码:这里可以看到3类,分别是奇奇怪怪的字符串、*和!!其中,奇奇怪怪的字符串就是加密过的密码文件。星号代表帐号被锁定,双叹号表示这个密码已经过期了。奇奇怪怪的字符串是以$6$开头的,表明是用SHA-512加密的,$1$
表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
修改日期:这个是表明上一次修改密码的日期与1970-1-1相距的天数密码不可改的天数:假如这个数字是8,则8天内不可改密码,如果是0,则随时可以改。
密码需要修改的期限:如果是99999则永远不用改。如果是其其他数字比如12345,那么必须在距离1970-1-1的12345天内修改密码,否则密码失效。
修改期限前N天发出警告:比如你在第五条规定今年6月20号规定密码必须被修改,系统会从距离6-20号的N天前向对应的用户发出警告。
密码过期的宽限:假设这个数字被设定为M,那么帐号过期的M天内修改密码是可以修改的,改了之后账户可以继续使用。
帐号失效日期:假设这个日期为X,与第三条一样,X表示的日期依然是1970-1-1相距的天数,过了X之后,帐号失效。
保留:被保留项,暂时还没有被用上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: