我想在 C# 应用程序中实现哈希算法的版本,并且需要知道 Windows 如何哈希和检查密码。我还需要知道它们的存储位置。据我所知,在 C:\Windows\System32\config 下的 SAM 文件中。这是对的吗?
这里没有什么棘手的。 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 密码哈希安全性。