浅谈系统密码加密方式

安全 网站安全
本文总结了一下Windows系统以及Linux系统下密码加密保存方式。

前几天恰巧碰到不算是题目的题目吧,涉及到Win与Linux的系统密码存放问题。这里总结一下两个系统下密码加密保存方式。

Windows:

SAM文件一般存放在C:\Windows\System32\Config下,存在LM-Hash与NT-Hash两种加密方式。

Windows系统下的hash密码格式为:

用户名称:RID:LM-HASH值:NT-HASH值,例如:

Administrator:500:C8825DB10F2590EAAAD3B435B51404EE

:683020925C5D8569C23AA724774CE6CC:::

用户名称为:Administrator

RID为:500

LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE

NT-HASH值为:683020925C5D8569C23AA724774CE6CC

关于Windows下LM-Hash值生成原理:

假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000

说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0×00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:

57454C434F4D45 -str_to_key()-> 56A25288347A348A

00000000000000 -str_to_key()-> 0000000000000000

这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密

“KGS!@#$%” -> 4B47532140232425

56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F

0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE

将加密后的这两组数据简单拼接,就得到了最后的LM Hash

LM Hash: C23413A8A1E7665FAAD3B435B51404EE

由于LM-Hash只能最大限制14位密码,安全性较差,NT-Hash应运而生。

假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0×00补足14字节

“123456″ -> 310032003300340035003600

从ASCII串转换成Unicode串时,使用little-endian序。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,

16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4

就得到了最后的NTLM Hash

NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4

与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串”KGS!@#$%”。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。

Linux:

Linux密码存放于shadow文件。假设取其中一条记录如下:

manifold:$1$UmP0IdhG$JwSobqdBKrgzY9GJafh.I1:14627:0:99999:7:::

manifold为账户名

$1代表md5加密

UmP0IdhG是salt

JwSobqdBKrgzY9GJafh.I1是使用MD5加密后的密码。

注意由于salt是不固定的,故同样的帐号对应HASH可以不同。

责任编辑:蓝雨泪 来源: 2cto
相关推荐

2021-11-22 23:20:01

加密算法架构

2010-05-19 13:37:39

MySQL数据库密码

2023-10-16 19:05:20

2019-08-28 07:05:45

2009-09-28 13:39:01

Hibernate工作

2009-07-14 12:47:07

WebWork工作方式

2012-11-30 14:35:17

2009-09-29 16:16:58

Hibernate H

2023-09-01 07:30:59

2009-07-06 18:09:18

linuxApache密码

2010-05-13 17:47:24

Subversion密

2009-07-07 15:46:06

linuxGRUB加密码

2010-09-09 10:06:56

Zigbee协议栈加密算法

2021-12-30 23:57:29

插值方式Github

2011-06-20 10:36:29

SEO

2009-08-13 18:36:29

C#数组工作方式

2011-06-23 15:26:49

操作系统认证权限

2011-12-22 11:22:31

2010-07-13 14:41:14

2013-02-26 09:34:32

点赞
收藏

51CTO技术栈公众号