Прочитав теорию работы горутин, в принципе ничего сложно, решаю практическую задачу для их понимания, но столкнулся с проблемой, хотелось бы получить консультацию на живом примере , нежели в выводе "Hello wordl!" горутинами в цикле.
package main
import (
"bufio"
"bytes"
"fmt"
"golang.org/x/crypto/bcrypt"
"io"
"os"
"strings"
"sync"
)
var (
hash_target = "$2y$10$Jk2gOsrCgYKaVutj9JIVYuXlinrpzeqxdXng/Nm96O7t5AvVBir/a"
dict = "/home/supreme/rockyou.txt"
r io.Reader
err error
)
func main(){
r, err := os.Open(dict)
if err != nil{
fmt.Println(err)
}
defer r.Close()
var wg sync.WaitGroup
var reader *bufio.Reader = bufio.NewReader(r)
var pasw string
wg.Add(1)
for {
pasw, err = reader.ReadString('\n')
if err == io.EOF {
fmt.Printf("File %s end detected", dict)
} else {
pasw = strings.Replace(pasw, "\n", "", -1)
go hack_pass(pasw, hash_target, &wg)
}
}
wg.Wait()
}
func hack_pass(str string,hash_target string, wg *sync.WaitGroup){
fmt.Println("----------------------------------")
if CheckPasswordHash(str,hash_target){
fmt.Println("----------------------------------")
fmt.Println("[SUCCESS]:", str)
fmt.Println("----------------------------------")
os.Exit(0)
}else{
fmt.Println("[FAILURE]:", str)
}
wg.Done()
return
}
func CheckPasswordHash(password string, hash string)bool{
err := bcrypt.CompareHashAndPassword([]byte(hash),[]byte(password))
return err == nil
}