Ubuntu如何加密用户密码

Ubuntu 如何加密用户密码

因为最近在上密码学的课程,并且提到了这个问题故我在这里做一个学习记录。

一. 获得加密后的密码

首先,我们可以使用如下命令在ubuntu中新建一个用户(例如:xiaoming),并为xiaoming创建一个属于他的密码(例如:abc):

useradd xiaoming
passwd xiaoming

效果如下:
useradd xiaoming

所以我们可以得到如下表格:

用户名 密码
xiaoming abc

接下来我们可以通过查看etc/shadow/ 文件发现xiaoming被加密后的密码
usershadow

我们可以看到xiaoming后面跟了一串字符串并且被 : 分割其中第一部分就是加密后的密码。其它部分分别表示最后改密码的日期,最小密码寿命,最大密码寿命等等。感兴趣的可以查看这个网页:Ubuntu Manpage.

至此我们可以得到如下表格:

用户名 密码 加密后的密码
xiaoming abc $6$WlpUfoK3$AYW/Oh7.SOt2Lk4bKbid2DkmENd27b4fA82dS/xiOOJJNbBi3PHpwK6tYQ2WOjR75DhxbinHI8hiEkOh4cDL/1

那么问题来了,我们如何解读这串字符串呢?经过了一番google之后,我才知道了Linux加密用户密码的存储格式。加密后的密码可以分为三段来看,被 $ 分割。其中第一段就是表明散列算法的类型,第二段是系统为我们密码添加的盐值(salt),最后第三段才是映射完的散列值。

故我们可以得到:

用户名 密码 算法 盐值 消息摘要
xiaoming abc 6 WlpUfoK3 AYW/Oh7.SOt2Lk4bKbid2DkmENd27b4fA82dS/xiOOJJNbBi3PHpwK6tYQ2WOjR75DhxbinHI8hiEkOh4cDL/1

其中6 代表的是采用SHA-512算法进行加密的。其他还有诸如1代表的是MD5算法,5代表的是SHA-256算法等等。

二.进行算法验证

因为通过上述的步骤我们知道了ubuntu加密xiaoming的密码所采用的算法是SHA-512。故接下来对SHA-512进行分析验证。因为关于SHA-512的详细算法我也是看其他博客学习的,所以在这里也不重新搬运了。有兴趣的可以直接看这个SHA256算法原理详解-随煜而安。

我们直接可以先用python的crypt来验证一下。

#!usr/bin/python
#-*- coding:UTF-8 -*-

import crypt

hashedtext=crypt.crypt("abc","$6$WlpUfoK3")
print hashedtext

输出是:

/usr/bin/python2.7 /home/leo/PycharmProjects/test/LinuxPassword.py
$6$WlpUfoK3$AYW/Oh7.SOt2Lk4bKbid2DkmENd27b4fA82dS/xiOOJJNbBi3PHpwK6tYQ2WOjR75DhxbinHI8hiEkOh4cDL/1

Process finished with exit code 0

可以看到输出结果跟之前我们在etc/shadow中看到的是一样的。

参考:

维基百科
Understanding and generating the hash stored in etc/shadow
SHA256算法原理详解-随煜而安

你可能感兴趣的:(密码学)