main.go (1184B)
1 package main 2 3 import ( 4 "crypto/rand" 5 "crypto/sha256" 6 "encoding/hex" 7 "flag" 8 "fmt" 9 "sync" 10 ) 11 12 var done = false 13 var final = "" 14 15 func hashPrefixMatches(message string, prefix string) bool { 16 17 result := sha256.Sum256([]byte(message + "\n")) // echo adds this by default 18 resString := hex.EncodeToString(result[:]) 19 20 for idx, _ := range prefix { 21 if prefix[idx] != resString[idx]{ 22 return false 23 } 24 } 25 26 return true 27 } 28 29 func worker(message string, prefix string, wg *sync.WaitGroup) { 30 31 defer wg.Done() 32 33 for done == false { 34 text := message + rand.Text() 35 36 if hashPrefixMatches(text, prefix) { 37 fmt.Println("Good: " + text) 38 done = true 39 final = text 40 return 41 } else { 42 continue 43 } 44 } 45 } 46 47 48 func main() { 49 50 // andrew - 3GFR44CIP4GFICNCAIL6NE7Q2W 51 // 9 zeroes 52 zeroesPtr := flag.Int("zeroes", 5, "Number of zeroes prefixed on sha256sum") 53 54 flag.Parse() 55 56 if len(flag.Args()) > 1 { 57 panic("Unexpected number of arguments") 58 } 59 60 message := flag.Args()[0] + " - " 61 zeroes := *zeroesPtr 62 63 prefix := "" 64 65 for i := 0 ; i < zeroes ; i++ { 66 prefix += "0" 67 } 68 69 wg := sync.WaitGroup{} 70 71 for i := 0; i < 200; i++ { 72 wg.Add(1) 73 go worker(message, prefix, &wg) 74 } 75 wg.Wait() 76 77 78 }