lanman散列算法对用户口令信息进行处理时,密钥长度为多少字符
发布网友
发布时间:2023-12-30 15:20
我来回答
共1个回答
热心网友
时间:2024-03-02 15:32
1、 Windows系统本地帐号信息存储
Windows NT/2000/2003/XP等系统使用sam文件作为本地用户账户数据库,所有本地帐号的登录名和口令等相关信息都保存在这个文件中。系统对保存在sam中的口令信息进行了加密处理,以保护口令信息的机密性。此外,在系统运行期间,sam文件被system账号锁定,即使是administrator账号也无法对其进行删除或拷贝等操作。 为了保证Windows操作系统的向后兼容性,Windows NT/2000/2003/XP系统采用了两种不同的机制对帐号的口令信息进行加密,所以在sam文件中每个用户口令对应着两个口令字,一个是LanMan版本的LM散列值,另一个是NT版本的NTLM散列值。
LanMan散列算法
LanMan散列算法对用户口令信息的处理过程:
第一,将所有英文字母均转换为大写字母形式;
第二,检查密钥长度是否是14个字符,如果密钥长度不足14个字符则用0补足;(注:Windows NT和Windows 2000系统密钥最长为14个字符,而Windows 2003和xp无此*,如果密钥超过14个字符,则不会生成LM散列值,而是只生成NTLM散列值)
第三,将密钥平均分成两份,每份含7个字符,再分别对每份密钥进行加密处理;
第四,最后将加密处理后的密码组合起来。得到最终的LM散列值。
LM Hash示例:假设明文口令是"Welcome"
首先全部转换成大写,再变换成机器存储模式数据,在变换过程中如果明文口令不足14字节,则在后面添加0x00补足14字节。
"WELCOME" -> 57454C434F4D4500000000000000
(注:可以将明文口令复制到UltraEdit编辑器中使用十六进制方式查看即可获取明文口令的十六进制串)
然后将上述代码分割成两组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