Hash,一般翻译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

一、MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?这里简单说一下:

(1)MD4

MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD是 Message Digest的缩写。它适用在32位字长的处理器上用高速软件实现,它是基于 32 位操作数的位操作来实现的。

(2) MD5

MD5(RFC 1321)是 Rivest于1991年对MD4的改进版本。它仍以512位分组来输入,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

(3)SHA1 及其他

SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。

二、Windows系统下的hash密码格式

Windows系统下的hash密码格式为:用户名称:RID:LM-HASH值:NT-HASH值,例如:Administrator:500:C8825DB10F2590EAAAD3B435B51404EE:683020925C5D8569C23AA724774CE6CC:::表示

用户名称为:Administrator

RID为:500

LM-HASH值为:C8825DB10F2590EAAAD3B435B51404EE
    NT-HASH值为:683020925C5D8569C23AA724774CE6CC

(1)Windows下LM Hash值生成原理

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

技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。

说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足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

(2) Windows下NTLM Hash生成原理

从IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash应运而生。假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节

"123456" -> 310032003300340035003600

从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,

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

就得到了最后的NTLM Hash

NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4

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

三、总结一下:

两种加密算法分别是LanManager(LM)和NTLM,LM只能存储小于等于14个字符的密码hash,如果密码大于14个,windows就自动使用NTLM对其进行加密了,(这个在LC5里有两种破解方式,所以破解不出来的时候可以换种思路,基本是NTLM的)一般情况下使用PwDump或其他一些hash导出工具(如Cain)导出的hash都有对应的LM和NTLM值,也就是说这个密码位数<=14,如果大于14位那么就只有对应的NTLM hash可用了,这时LM也会有值,但对我们来说没用,不能靠他来查LM彩虹表。 
      操作系统:对于XP、win2k和win2k3来说,系统默认使用LM进行加密(也可人为设置成NTLM),之后的win2008、win7和Vista禁用了LM,默认使用NTLM,所以不要拿着LM生成的rainbow table去找NTLM的hash值,但是反过来却可以,因为使用LM方式的加密往往会存在一个对应的NTLM hash(如果密码位数<=14的话,系统同时对这个密码使用NTLM加密并存储了NTLM的hash),这时候使用ophcrack的NTLM表查找的就是这个NTLM的hash了,而不是LM的hash。

Windows NT/NTLM 加密的更多相关文章

  1. Windows协议 NTLM篇

    NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...

  2. MS SQL Could not obtain information about Windows NT group/user 'domain\login', error code 0x5. [SQLSTATE 42000] (Error 15404)

    最近碰到一个有趣的错误:海外的一台数据库服务器上某些作业偶尔会报错,报错信息如下所示: -------------------------------------------------------- ...

  3. Could not obtain information about Windows NT group/user 'xxxx\xxxx', error code 0x5

    案例描述 昨晚踢球回来,接到电话说一个系统的几个比较重要作业出错,导致系统数据有些问题.让我赶紧检查看看.检查作业日志时发现,作业报如下错误(关键信息用xxx替换) The job failed.  ...

  4. 第一章 Windows NT System Components

    Page 3. The focus(焦点) of this book is Windows NT file system and the interaction(交互) of the file sys ...

  5. Windows NT 驱动程序开发人员提示 -- 应注意避免的事项

    下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: 1.  一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度 ...

  6. [原创]使用GCC创建 Windows NT 下的内核DLL

    原文链接:使用GCC创建 Windows NT 下的内核DLL 在温习<<Windows 2000 Driving>>分层驱动程序一章的时候,看到了关于紧耦合驱动连接方式,这种 ...

  7. Windows NT 技术简介

    Windows NT 技术简介 NT:New Technoly(新技术,因比DOS.WIN9X采用了很多新技术而得名) Windows NT基本介绍 WindowsNT是Microsoft推出的面向工 ...

  8. Windows NT 之父 - David Cutler

    David Cutler,大卫·卡特勒,一位传奇程序员,1988年去微软前号称硅谷最牛的内核开发人员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”.他曾供职于杜邦.DEC等公 ...

  9. [转帖]windows7/windows NT介绍

    windows7/windows NT介绍 原文应该是IT168发布的 但是一直没找到 感觉看了之后 明白了很多 技术都是互相融合的 没有严格意义上的对立直说.   Windows 7/Windows ...

随机推荐

  1. 子串(codevs 4560)

    题目描述 Description 有两个仅包含小写英文字母的字符串A和B.现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串,请问 ...

  2. Gym 215177D 母亲节的礼物

    Gym 215177D 母亲节的礼物 Problem : 给n个点m条边的无向图,每个点的度数小于等于7,要求用4种不同的颜色给每个点染色,使得每个点相邻的点中最多只有一个相同颜色的点.(n<= ...

  3. APP后端处理视频的方案

    在当前的app应用中,到处都能看到视频的身影,例如,在社交类的app上,用户可以拍摄属于自己的小视频,并发布到相应得栏目,增加和好友们互动的机会. 后台常见的视频处理有以下几种: ·          ...

  4. Spring中基于AOP的@AspectJ

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/aspectj-based-aop-with- ...

  5. json转xml报[java.lang.NoClassDefFoundError: nu/xom/Serializer]

    原文:http://blog.csdn.net/figo645/article/details/48413571 开始学习JSON了,那么很自然的,我开始要熟悉一些基本的JSON语法 {}代表对象,[ ...

  6. IOCP实现的任务队列

    unit IOCPQueue; interface uses windows, classes; type TOnQueueProc = procedure(sender: tobject; Para ...

  7. CTEX - 在线文档 - TeX/LaTeX 常用宏包

    CTEX - 在线文档 - TeX/LaTeX 常用宏包       页面与章节标题式样   浮动对象及标题设计   生成与插入图形   表格与列表   目录与索引   参考文献   数学与化学公式 ...

  8. 查看linux接口进出口流量的命令;linux 网络监控;流量监控

    1.nload,左右键切换网卡 2.sudo iftop 3.sudo iptraf 按连接/端口查看流量 4.sudo nethogs: 按进程查看流量占用 5.ss: 连接查看工具 6.dstat ...

  9. asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限

    [前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...

  10. SpringMVC+Hibernate+Junit4+json基本框架近乎0配置

    公司是做APP开发的,须要后台来提供接口,于是乎,这个任务就交给我,经过重复的尝试,学习和參考别人的demo,最终搭出自己还算惬意的框架.SpringMVC+Sping3+Hibernate4+Jun ...