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

13 篇文章 1 订阅
3 篇文章 0 订阅


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

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

这样表达是很不友好的。

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

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

QQ截图20150305111855

 

为什么网上还有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”这个文件。我用自己的虚拟机做一个演示,如下图所示:

014

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

015

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

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

ID Method
1 MD5
2a

Blowfish(not in mainline glibc;added in some Linux distribution)

5

SHA-256(since glibc 2.7)

6

SHA-512(since glibc 2.7)

      从我上面的截图可以看到,密文采用的是SHA-512算法。$salt是一个最多16个字符的随机生成的字符串,用来增加破解难度。$encrypted就是通过加密算法和salt算出来的密文。

      接下来,描述一下这个密码存储的结构。

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

Linux系统中,`/etc/passwd` 和 `/etc/shadow` 是两个重要的文件,用于存储用户账户信息和密码哈希值。我会分别对它们进行详细解释。 1. `/etc/passwd` 文件: `/etc/passwd` 是一个文本文件,包含了系统中所有用户账户的基本信息。每一行对应一个用户账户,字段之间使用冒号(:)进行分隔,例如: ``` username:password:UID:GID:gecos:home_dir:shell ``` - `username`:用户账户的登录名。 - `password`:用户账户的密码哈希值(现在已经被移至 `/etc/shadow` 文件中)。 - `UID`:用户账户的唯一标识符。 - `GID`:用户账户所属的主要组标识符。 - `gecos`:用户账户的一些额外信息,如全名、电话等(可以为空)。 - `home_dir`:用户账户的主目录。 - `shell`:用户账户的默认Shell程序。 注意:现在 `/etc/passwd` 中的 `password` 字段已经被 'x' 或者 '*' 取代,实际的密码哈希值被移至 `/etc/shadow` 文件中。 2. `/etc/shadow` 文件: `/etc/shadow` 是一个只有 root 用户可读的文件,用于存储用户账户的密码哈希值和一些其他安全相关的信息。每一个用户账户的信息占用一行,由冒号(:)分隔,如下所示: ``` username:password:lastchg:min:max:warn:inactive:expire:disable ``` - `username`:用户账户的登录名。 - `password`:用户账户的密码哈希值。 - `lastchg`:上次修改密码的日期(从1970年1月1日开始算起的天数)。 - `min`:两次修改密码之间所需的最小天数。 - `max`:密码有效期的最大天数。 - `warn`:提前多少天给用户发出密码过期警告。 - `inactive`:密码过期后多少天用户账户被禁用。 - `expire`:用户账户被禁用的日期(从1970年1月1日开始算起的天数)。 - `disable`:用户账户是否被禁用。 `/etc/shadow` 文件中的密码哈希值通常是经过加密且不可逆的,用于验证用户输入的密码是否正确。 总结:`/etc/passwd` 文件存储了用户账户的基本信息,而 `/etc/shadow` 文件存储了用户账户的密码哈希值和其他安全相关的信息。这样通过将密码哈希值存储在 `/etc/shadow` 中,能够增加系统的安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值