static void BruteForceAttack(HashFunctionBase algorithm) { var password = "******"; var salt = CryptoHelper.GenerateBytes(algorithm.SaltSize); var hash = algorithm.GenerateHash(password.ToBytes(), salt); var solved = GetPasswords(password.Length) .First(s => CryptoHelper.ByteArrayEqual(algorithm.GenerateHash(s.ToBytes(), salt), hash)); Assert.AreEqual(password, solved); }
static void BruteForceAttack_Parallel(HashFunctionBase algorithm) { var password = "******"; var salt = CryptoHelper.GenerateBytes(algorithm.SaltSize); var hash = algorithm.GenerateHash(password.ToBytes(), salt); string solved = null; Parallel.ForEach(GetPasswords(password.Length), (s, state) => { if (!CryptoHelper.ByteArrayEqual(algorithm.GenerateHash(s.ToBytes(), salt), hash)) { return; } solved = s; state.Stop(); }); Assert.AreEqual(password, solved); }