Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "crypto/md5"
- "encoding/hex"
- "log"
- "fmt"
- "time"
- )
- var hash [16]byte
- // nextByte возвращает следующий после данного символ алфавита
- func nextByte(b byte) byte {
- switch b {
- case 'z':
- return '0'
- case '9':
- return 'a'
- default:
- return b + 1
- }
- }
- // nextPass изменяет текущий пароль(на месте) на следующий в лексикографическом порядке
- func nextPass(b []byte) {
- for i := len(b) - 1; i >= 0; i-- {
- b[i] = nextByte(b[i])
- if b[i] != '0' {
- return
- }
- }
- }
- // worker по порядку генерирует пароли и сравнивает хэш каждого пароля с искомым
- func worker(b []byte) string {
- for md5.Sum(b) != hash {
- nextPass(b)
- }
- return string(b)
- }
- func main() {
- t := time.Now()
- const hashString = "95ebc3c7b3b9f1d2c40fec14415d3cb8" // "zzzzz"
- h, err := hex.DecodeString(hashString)
- if err != nil {
- log.Fatal(err)
- }
- copy(hash[:], h)
- fmt.Println("Пароль: ", worker([]byte("00000")))
- fmt.Println("Время поиска: ", time.Since(t))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement