예제 #1
0
        public void WDigestHash_UnicodeInput()
        {
            var hashes = WDigestHash.ComputeHash(@"Příliš žluťoučký kůň úpěl ďábelské ódy. В чащах юга жил бы цитрус? Да, но фальшивый экземпляр!".ToSecureString(), "*****@*****.**", "April", "ADATUM", "Adatum.com");

            Assert.AreEqual(WDigestHash.HashCount, hashes.Length);
            Assert.AreEqual("fad613ac9301e7ae6dcc537e2eef5021", hashes[0].ToHex());
            Assert.AreEqual("f3b76b7db452d6be096942f9bcce74ea", hashes[1].ToHex());
            Assert.AreEqual("919952d85318a3d5b67e9df5a78b7141", hashes[2].ToHex());
            Assert.AreEqual("fad613ac9301e7ae6dcc537e2eef5021", hashes[3].ToHex());
            Assert.AreEqual("35dd0ca1e7631567f2ae132e038ccd8f", hashes[4].ToHex());
            Assert.AreEqual("f6d89b7867a2d3d1cbae038091bdb0cc", hashes[5].ToHex());
            Assert.AreEqual("0bfedf219f856e2edcfec5231470c0b3", hashes[6].ToHex());
            Assert.AreEqual("df33d4e6eb9af1406b25e0e16548a2da", hashes[7].ToHex());
            Assert.AreEqual("5e2d43bdbb743c5d2601baafdd32a1af", hashes[8].ToHex());
            Assert.AreEqual("5277f1cf72b11b2ff48721cf9d431893", hashes[9].ToHex());
            Assert.AreEqual("9681f457b0767ed163b8dc8526469af6", hashes[10].ToHex());
            Assert.AreEqual("3e9ce47f72f7e39661199f18ee8bc2aa", hashes[11].ToHex());
            Assert.AreEqual("404243dbcec9a1d73d0b1cb49060c196", hashes[12].ToHex());
            Assert.AreEqual("29d93dc099bd1b5c9f20bbeb042bb4ff", hashes[13].ToHex());
            Assert.AreEqual("0ecdf90500b3189dc3082dd1bce0b5bc", hashes[14].ToHex());
            Assert.AreEqual("4a4135a2ac1daa81fea605adc9188c67", hashes[15].ToHex());
            Assert.AreEqual("0a1f7bd410a8340342045daf0cc78789", hashes[16].ToHex());
            Assert.AreEqual("be97dc768a7683e839438b29e30b6f7b", hashes[17].ToHex());
            Assert.AreEqual("7d6a36f69323172b25ef61a761f29d1b", hashes[18].ToHex());
            Assert.AreEqual("ed2d15fcde27c04892014aaf46201ec8", hashes[19].ToHex());
            Assert.AreEqual("51f43cb00d57226f530d52908a072c43", hashes[20].ToHex());
            Assert.AreEqual("35329ba52771477b8665ef47b89bebbf", hashes[21].ToHex());
            Assert.AreEqual("7515013a7da75b573467e521abb783e1", hashes[22].ToHex());
            Assert.AreEqual("9bab42c45f29cda4f4dadad0a14cc8b6", hashes[23].ToHex());
            Assert.AreEqual("26075b3e4791600800363160d217265b", hashes[24].ToHex());
            Assert.AreEqual("bbba87b75b45d71cf7fd84d4e2a22344", hashes[25].ToHex());
            Assert.AreEqual("18ca7497b2624e7fde7165854788dd49", hashes[26].ToHex());
            Assert.AreEqual("0d9a52cbff395f8df9e285b01c2a78fb", hashes[27].ToHex());
            Assert.AreEqual("c4280744f0ff1181b939b71b1ddc37f5", hashes[28].ToHex());
        }
예제 #2
0
        public void WDigestHash_ASCIIInput()
        {
            var hashes = WDigestHash.ComputeHash(@"Pa$$w0rd".ToSecureString(), null, "Administrator", "ADATUM", "Adatum.com");

            Assert.AreEqual(WDigestHash.HashCount, hashes.Length);
            Assert.AreEqual("3f602ffdac6b06655481a06cce08adf3", hashes[0].ToHex());
            Assert.AreEqual("971256a81b883974fcbcf369f67ecf61", hashes[1].ToHex());
            Assert.AreEqual("ec3d57e1caf31b9cd0fc1e3bf913bbf6", hashes[2].ToHex());
            Assert.AreEqual("3f602ffdac6b06655481a06cce08adf3", hashes[3].ToHex());
            Assert.AreEqual("30c8584ec6a52de03fead6e66443b896", hashes[4].ToHex());
            Assert.AreEqual("da9aab75d2ad8152daedc92aea4e49ac", hashes[5].ToHex());
            Assert.AreEqual("eb781ca6bf2d4f3a30bc8f8ba360b1a0", hashes[6].ToHex());
            Assert.AreEqual("b70f192a3ee11e47bc1408e18835210e", hashes[7].ToHex());
            Assert.AreEqual("afebaf56c0b704ab12276306c3524d9f", hashes[8].ToHex());
            Assert.AreEqual("a4d5b0be4785b495b4b53e70c35d4990", hashes[9].ToHex());
            Assert.AreEqual("1167280ac9a9bc1ec1b49d171a8e9b62", hashes[10].ToHex());
            Assert.AreEqual("e17ff031d74e32e67ec1f1b6e0b2c26b", hashes[11].ToHex());
            Assert.AreEqual("379c029a72f4d0e649e7aa6ad659dbe0", hashes[12].ToHex());
            Assert.AreEqual("f7fcfe4c5ec50f9db38577cea6b99f28", hashes[13].ToHex());
            Assert.AreEqual("ffde532cbd677b5562ce4455099cdafd", hashes[14].ToHex());
            Assert.AreEqual("478561ada3cecab0094ea704b90b1c84", hashes[15].ToHex());
            Assert.AreEqual("51ca360a2a2d35b184a0c78fd0432137", hashes[16].ToHex());
            Assert.AreEqual("f7841c8b57a9a65875ee40a39ba270cb", hashes[17].ToHex());
            Assert.AreEqual("3b8dc2b699160e41ce1c8f1cdacd0c2c", hashes[18].ToHex());
            Assert.AreEqual("132d33c113262bd560b40c39d1cac291", hashes[19].ToHex());
            Assert.AreEqual("8b8c4f339d3736ede2c4c0bc4e53f3ff", hashes[20].ToHex());
            Assert.AreEqual("209ae3b1dc6789f90f352e2ff273111b", hashes[21].ToHex());
            Assert.AreEqual("9b22dae245b82c3e55061265b288607c", hashes[22].ToHex());
            Assert.AreEqual("bb1edeb4c9b818d829800192a1528a88", hashes[23].ToHex());
            Assert.AreEqual("f78b1d41fe8372506e31461625743eb4", hashes[24].ToHex());
            Assert.AreEqual("dd829e0cda63ba68f95f98b1750885f6", hashes[25].ToHex());
            Assert.AreEqual("177eeed7b3cf4df4e114c4ca91beafcd", hashes[26].ToHex());
            Assert.AreEqual("9c0d49ddf1ac7cff9d1e6f96cc8a55d5", hashes[27].ToHex());
            Assert.AreEqual("8da34a0b94604b06cd58f9bf69142383", hashes[28].ToHex());
        }
예제 #3
0
        public void WDigestHash_Compute_LDS()
        {
            // Property value taken from AD LDS
            string expectedBlob  = "3100011d000000000000000000000000af4156909297baece4e553b731d9d552da58c12e5880cad54a3f909c07b0792eec9d262783c811ad9cc7aeb1ab019fe0af4156909297baece4e553b731d9d552af4156909297baece4e553b731d9d552ec9d262783c811ad9cc7aeb1ab019fe0da58c12e5880cad54a3f909c07b0792e95e11e920c7405ca6639d932888cc11c53d9e953141b322f29eb1a02798c299042eea90067734b2a81abbc79618cc1519d9aac28e63107a495266e755f7a2babac6b5dfb3bfa3b7039058310d5b36ccc7c97824dd59b9a6a053b5fae3d8603f20a5e2bc3111c759efb3a91e3740633e83b12daad09e83cb92477ac59993c5a843b12daad09e83cb92477ac59993c5a843b12daad09e83cb92477ac59993c5a8471e7228faba51df979beef06b34f791820aa1475f40540f0db59f9d2d93fc3da5f88f6d82d185741a82c7fa79e801c6d8eae592a0ce55271a17de0b39cf1e5e9923354fb99887724cf2b10e88108776b427804b8a6d6ed92c11ecb94e40da72c0c997bc1906b1f0092d61bd0efee428b0c997bc1906b1f0092d61bd0efee428b0c997bc1906b1f0092d61bd0efee428bd93e9a9a7452dff036a67a5d5d333d7c4effe21b0afc142382943ef26024649aaa6a6a95c237f2b8efa2f13ecb0cb220";
            string password      = @"Pa$$w0rd";
            string userDN        = "CN=john,DC=dsinternals,DC=com";
            string namingContext = "DC=dsinternals,DC=com";

            // Compute and compare
            byte[][] hashes = WDigestHash.ComputeHash(password.ToSecureString(), userDN, namingContext);
            byte[]   blob   = WDigestHash.Encode(hashes);
            Assert.AreEqual(expectedBlob, blob.ToHex());
        }
예제 #4
0
        public SupplementalCredentials(SecureString password, string samAccountName, string userPrincipalName, string netBiosDomainName, string dnsDomainName)
        {
            // Input validation
            Validator.AssertNotNull(password, "password");
            Validator.AssertNotNull(samAccountName, "samAccountName");
            // Note that UPN can be NULL, as it is an optional user attribute.
            Validator.AssertNotNull(netBiosDomainName, "netBiosDomainName");
            Validator.AssertNotNull(dnsDomainName, "dnsDomainName");

            // Generate Kerberos keys
            this.Kerberos    = new KerberosCredential(password, samAccountName, dnsDomainName);
            this.KerberosNew = new KerberosCredentialNew(password, samAccountName, dnsDomainName);

            // Generate WDigest hashes
            this.WDigest = WDigestHash.ComputeHash(password, userPrincipalName, samAccountName, netBiosDomainName, dnsDomainName);

            // Generate a random NTLM strong hash that is definitely not based on a password.
            this.NTLMStrongHash = NTHash.GetRandom();

            // Note that we do not want to store the password in cleartext.
        }
예제 #5
0
 public void WDigestHash_NullInput()
 {
     var hashes = WDigestHash.ComputeHash(null, null, null, null, null);
 }