using System.Security.Cryptography;
using System.Collections.Generic;
public static void Main() {
public static void findCollision(string salt) {
Dictionary<string, string> hashesSoFar = new Dictionary<string, string>();
string all = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random rand = new Random();
for (int i = 0; i < 4; i++) {
toHash += all[rand.Next(all.Length)];
string hashOfString = getMD5(toHash, salt);
Console.WriteLine(toHash);
if (hashesSoFar.ContainsKey(hashOfString)) {
if (hashesSoFar.TryGetValue(hashOfString, out output)) {
Console.WriteLine(toHash + "," + output);
hashesSoFar.Add(hashOfString, toHash);
public static string getMD5(string input, string salt) {
MD5 md5 = System.Security.Cryptography.MD5.Create();
Encoding utf8 = Encoding.UTF8;
byte[] bArray = utf8.GetBytes(input);
byte[] arrayToHash = new byte[bArray.Length+1];
for (int i = 0; i < bArray.Length; i++) {
arrayToHash[i] = bArray[i];
arrayToHash[arrayToHash.Length-1] = Convert.ToByte(salt, 16);
byte[] md5hash = md5.ComputeHash(arrayToHash);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.Append(md5hash[i].ToString("X2"));