public void Execute() { BlenderHash hash = new BlenderHash(); switch (BlenderHashMode) { case BlenderHashMode.File: hash.ComputeHash(new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read), HashLength, Passes); Console.WriteLine(hash.Hash); break; case BlenderHashMode.Repl: while (true) { Console.Write("> "); hash.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Console.ReadLine()), HashLength, Passes); Console.WriteLine(hash.Hash); } case BlenderHashMode.String: hash.ComputeHash(ASCIIEncoding.ASCII.GetBytes(DataString), HashLength, Passes); Console.WriteLine(hash.Hash); break; } }
public static void CollisionCheck(string letters, int maxLength, int hashLength, int passes) { BlenderHash hashGenerator = new BlenderHash(); Dictionary <string, string> hashes = new Dictionary <string, string>(); char firstLetter = letters.First(); char lastLetter = letters.Last(); for (int length = 1; length < maxLength; length++) { StringBuilder accum = new StringBuilder(new String(firstLetter, length)); while (true) { if (accum.ToString().All(val => val == lastLetter)) { break; } for (int i = length - 1; i >= 0; --i) { if (accum[i] != lastLetter) { accum[i] = letters[letters.IndexOf(accum[i]) + 1]; break; } else { accum[i] = firstLetter; } } hashGenerator.ComputeHash(ASCIIEncoding.ASCII.GetBytes(accum.ToString()), hashLength, passes); string hash = hashGenerator.Hash; if (hashes.ContainsKey(hash)) { Console.WriteLine("{0} {1} = {2}", hashes[hash], accum, hash); } else { hashes.Add(hash, accum.ToString()); } } } }