Anindya Maiti
10 months ago
3 changed files with 110 additions and 8 deletions
@ -0,0 +1,102 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"crypto/sha256" |
|||
"encoding/hex" |
|||
"fmt" |
|||
"math/rand" |
|||
"sort" |
|||
"time" |
|||
) |
|||
|
|||
func main() { |
|||
|
|||
trialset := []int{} |
|||
numtrials := 100 |
|||
for i := 0; i < numtrials; i++ { |
|||
trialset = append(trialset, hashTrial()) |
|||
} |
|||
|
|||
fmt.Println("Mean Trials: " + fmt.Sprint(mean(trialset))) |
|||
fmt.Println() |
|||
fmt.Println("Median Trials: " + fmt.Sprint(median(trialset))) |
|||
fmt.Println() |
|||
|
|||
} |
|||
|
|||
func median(numbers []int) float64 { |
|||
sort.Ints(numbers) |
|||
n := len(numbers) |
|||
if n%2 == 0 { |
|||
return float64(numbers[n/2-1]+numbers[n/2]) / 2 |
|||
} |
|||
return float64(numbers[n/2]) |
|||
} |
|||
|
|||
func mean(numbers []int) float64 { |
|||
var sum int |
|||
for _, n := range numbers { |
|||
sum += n |
|||
} |
|||
return float64(sum) / float64(len(numbers)) |
|||
} |
|||
|
|||
func hashTrial() int { |
|||
|
|||
// puzzle difficulty
|
|||
difficulty := 5 |
|||
|
|||
// string to match leading zeros
|
|||
m := "" |
|||
for i := 0; i < difficulty; i++ { |
|||
m += "0" |
|||
} |
|||
|
|||
// counter for number of trials
|
|||
trials := 1 |
|||
|
|||
// original message to hash
|
|||
s := "Hello" |
|||
|
|||
// random seed using time and generation of a nonce
|
|||
rand.Seed(time.Now().UnixNano()) |
|||
nonce := rand.Intn(1000000) |
|||
|
|||
// compute first sha256
|
|||
h := sha256.New() |
|||
p := string(s) + " " + fmt.Sprint(nonce) |
|||
|
|||
h.Write([]byte(p)) |
|||
|
|||
fmt.Println() |
|||
fmt.Println(s) |
|||
fmt.Println() |
|||
fmt.Println(p) |
|||
fmt.Println() |
|||
fmt.Println(hex.EncodeToString(h.Sum(nil))) |
|||
fmt.Println() |
|||
|
|||
// compute sha256 until leading zeros are found
|
|||
for string(hex.EncodeToString(h.Sum(nil))[:difficulty]) != m { |
|||
|
|||
h.Reset() |
|||
|
|||
nonce++ |
|||
p = string(s) + " " + fmt.Sprint(nonce) |
|||
h.Write([]byte(p)) |
|||
|
|||
fmt.Println(p) |
|||
fmt.Println() |
|||
fmt.Println(hex.EncodeToString(h.Sum(nil))) |
|||
fmt.Println() |
|||
|
|||
trials++ |
|||
|
|||
} |
|||
|
|||
fmt.Println("Trials: " + fmt.Sprint(trials)) |
|||
fmt.Println() |
|||
|
|||
return trials |
|||
|
|||
} |
Loading…
Reference in new issue