### PTH 中 LM hash 和 NTLM hash 的区别

**LM Hash (LAN Manager Hash)**

- **全称**：LAN Manager Hash
- **哈希算法**：它是一种非常老旧且脆弱的哈希算法，主要用于 Windows NT 4.0 及更早的版本
- **加密方式**：
  1. 将用户的明文密码转换为大写
  2. 如果密码长度超过 14 个字符，只取前 14 个。如果不足 14 个，用空字符填充到 14 个
  3. 将 14 个字符的密码分成两部分，每部分 7 个字符
  4. 分别使用 DES（Data Encryption Standard）算法进行加密
- **主要缺陷**：
  - **不区分大小写**：LM 哈希会将所有字母都转换为大写，导致密码的复杂性大大降低，例如 `password` 和 `PASSWORD` 会生成相同的 LM 哈希
  - **分段加密**：将密码分成两段，每段单独加密，这使得哈希破解变得非常容易，攻击者可以分别破解这两段，大大缩短破解时间
  - **无盐值**：它没有使用盐值（Salt），这使得攻击者可以使用彩虹表（Rainbow Table）进行快速破解

**结论**：LM 哈希非常不安全，很容易在几秒钟内被破解。从 Windows Vista 和 Windows Server 2008 开始，LM 哈希默认是禁用的，除非为了向后兼容性而手动启用

**NTLM Hash (NT LAN Manager Hash)**

- **全称**：NT LAN Manager Hash
- **哈希算法**：它使用了 **MD4** 哈希算法，并且不对密码进行大小写转换或填充
- **加密方式**：
  1. 将用户的明文密码转换为 UTF-16LE 编码
  2. 对 UTF-16LE 编码的密码进行 MD4 哈希运算
- **主要特点**：
  - **区分大小写**：NTLM 哈希保留了密码的大小写，这增加了哈希破解的难度
  - **没有分段**：它对整个密码进行一次性哈希运算，而不是分段
  - **依然没有盐值**：尽管比 LM 哈希更安全，但 NTLM 哈希仍然没有使用盐值，因此，如果密码简单或在字典中，仍然可以通过彩虹表或字典攻击被破解