我想在C#应用程序中实现散列算法的版本,并且需要知道Windows如何散列并检查密码。我还需要知道它们的存储位置。据我所知,在C:\ Windows \ System32 \ config下的SAM文件中。这是对的吗?
答案 0 :(得分:2)
这里没有什么棘手的。 NTLM哈希只是unicode密码的MD4。 MD4是不负责任的弱点,所以你需要一个全面的加密库,比如Bouncy Castle。 MS没有本地方法。
另外,best reference on the topic。
使用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;
}
答案 1 :(得分:0)
哪个&#34; Windows&#34;格式你的意思是?
LM?