【转】/etc/shadow 口令的加密方法

原文出处: http://ly50247.appspot.com/2010/12/24/shadow_hash.html

 

linux的/etc/shadow是专门用于存放用户口令的,以前一直听说口令是用md5加密(其实是hash)过的,但里连的格式和md5sum生成的并不一样。可以查看下/etc/shadow,对该文件不了解的话可以上网查询。

下面来看第二列(这个是我随便生成的,并不是系统的):

$1$eCeLr51L$/1EEtFr8iQ.TySiJKHQRQ/

可以看出格式比较奇怪,里边有三个$,还有./等东西,而md5sum生成的hash类似这样

1$ echo -n password|md5sum

25f4dcc3b5aa765d61d8327deb882cf99  -

是十六进制串。显然shadow不是将口令直接md5sum得到的。其余可以 man 3 crypt 了解一下,内容太多,只贴一部分:

-------------

       If  salt is a character string starting with the characters "$id$" fol‐
       lowed by a string terminated by "$": 

              $id$salt$encrypted

       then instead of using the DES machine,  id  identifies  the  encryption
       method  used  and  this  then  determines  how the rest of the password
       string is interpreted.  The following values of id are supported:

              ID  | Method
              ─────────────────────────────────────────
              1   | MD5
              2a  | Blowfish (not in mainline glibc; added in some
                  | Linux distributions)
              5   | SHA-256 (since glibc 2.7)
              6   | SHA-512 (since glibc 2.7)
-------------

基本可以了解格式了。

也就是说hash方法是可以选择的,只有$1$就是MD5,而且产生这个还需要一个salt,它是一个8字节的字符串,hash是根据它和口令一样生成的,而shadow里这个salt是随机生成的。

可以写个程序试验一下:

01#define _XOPEN_SOURCE

02#include <stdio.h>

03#include <unistd.h>

04int main(int argc, char *argv[])

05{

06 char key[20] = "password";

07 char salt[20] = "$1$eCeLr51L33";

08 printf("%s\n", crypt(key, salt));

09

10 return 0;

11}

其余最开始的 $1$eCeLr51L$/1EEtFr8iQ.TySiJKHQRQ/ 就是用它生成的。shadow用的基本也是这个方法,只是那个salt不是确定的,可以用mkpasswd进行生成。

它虽然说是md5 Method,但和md5sum并不相同,二者也不可以互相转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值