Windows 密码在磁盘上的存储方式和位置,以及使用哪些算法对其进行哈希处理

本文关键字:算法 处理 哈希 磁盘 密码 存储 位置 方式 Windows | 更新日期: 2023-09-27 17:56:42

我想在 C# 应用程序中实现哈希算法的版本,并且需要知道 Windows 如何哈希和检查密码。我还需要知道它们的存储位置。据我所知,在 C:''Windows''System32''config 下的 SAM 文件中。这是对的吗?

Windows 密码在磁盘上的存储方式和位置,以及使用哪些算法对其进行哈希处理

这里没有什么棘手的。 NTLM 哈希只是 unicode 密码的 MD4。 MD4 不负责任地弱,因此您需要一个全面的加密库,例如 Bouncy Castle。MS 没有本机方法。

此外,关于该主题的最佳参考。

使用Org.BouncyCastle.Crypto.Generators;

使用 Org.BouncyCastle.Crypto.Parameters;

使用Org.BouncyCastle.Security;

使用 Org.BouncyCastle.Crypto.Digests;

我认为这些涵盖了它。 我希望。。。

这是一个将其作为 byte[] 返回的,您可以根据需要进行转换。

    /// <summary>
    /// Convert Password to NT Hash.  Convert to unicode and MD4
    /// </summary>
    /// <param name="passwordIn">password In</param>
    /// <returns>NT Hash as byte[]</returns>
    public static byte[] NTHashAsBytes(string passwordIn)
    {
        MD4Digest md = new MD4Digest();
        byte[] unicodePassword = Encoding.Convert(Encoding.ASCII, Encoding.Unicode, Encoding.ASCII.GetBytes(passwordIn));

        md.BlockUpdate(unicodePassword, 0, unicodePassword.Length);
        byte[] hash = new byte[16];
        md.DoFinal(hash, 0);

        return hash;
    }

你指的是哪种"Windows"格式?

NTLMv1

还是 NTLMv2?

LM?

DCC/MSCash/MS-Cache?

DCC2/MSCash2/MS-Cache2?

另请参阅问题 Windows 7 密码哈希安全性。