Windows密码存储在磁盘上的方式和位置,以及用于散列它们的算法?

时间:2014-04-05 12:44:03

标签: c# windows hash passwords

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

2 个答案:

答案 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;格式你的意思是?

NTLMv1 or NTLMv2

LM

DCC/MSCash/MS-Cache

DCC2/MSCash2/MS-Cache2

另见问题Windows 7 Password Hash Security