Skip to content

Instantly share code, notes, and snippets.

@stringsn88keys
Created July 22, 2017 16:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stringsn88keys/eeffef305cd738281f585aa2b4163806 to your computer and use it in GitHub Desktop.
Save stringsn88keys/eeffef305cd738281f585aa2b4163806 to your computer and use it in GitHub Desktop.
Go Sha3 hash search, single threaded and with concurrency of 2.
package main
import (
"encoding/base64"
"fmt"
"golang.org/x/crypto/sha3"
"strings"
"time"
)
func main() {
var before string
var after [64]byte
var base64Encoding string
var result chan string = make(chan string)
var resultString string
var addOnStart int64
start := time.Now()
addOn := 0
concurrency := 2
sem := make(chan bool, concurrency)
for {
before = fmt.Sprintf("Message%d", addOn)
after = sha3.Sum512([]byte(before))
base64Encoding = base64.StdEncoding.EncodeToString(after[:])
if strings.HasPrefix(base64Encoding, "TEST") {
fmt.Printf("%d seconds\n", int64(time.Since(start)/time.Second))
break
}
addOn++
}
fmt.Printf("%d: %s\n", addOn, base64Encoding)
addOnStart = 0
start = time.Now()
SEARCHY:
for {
sem <- true
go scan1000000(addOnStart, result, sem)
select {
case resultString, _ = <-result:
break SEARCHY
default:
}
addOnStart++
}
fmt.Printf("%d seconds\n", int64(time.Since(start)/time.Second))
fmt.Print(resultString)
}
func scan1000000(addOnStart int64, result chan string, sem chan bool) {
var before string
var after [64]byte
var base64Encoding string
defer func() { <-sem }()
for i := addOnStart * 1000000; i < (addOnStart+1)*1000000; i++ {
before = fmt.Sprintf("Message%d", i)
after = sha3.Sum512([]byte(before))
base64Encoding = base64.StdEncoding.EncodeToString(after[:])
if strings.HasPrefix(base64Encoding, "TEST") {
result <- fmt.Sprintf("%d: %s\n", i, base64Encoding)
break
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment