Advertisement
Guest User

Go md5-bruteforce

a guest
Mar 31st, 2015
990
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.17 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "crypto/md5"
  5.     "encoding/hex"
  6.     "log"
  7.     "fmt"
  8.     "time"
  9. )
  10.  
  11. var hash [16]byte
  12.  
  13. // nextByte возвращает следующий после данного символ алфавита
  14. func nextByte(b byte) byte {
  15.     switch b {
  16.     case 'z':
  17.         return '0'
  18.     case '9':
  19.         return 'a'
  20.     default:
  21.         return b + 1
  22.     }
  23. }
  24.  
  25. // nextPass изменяет текущий пароль(на месте) на следующий в лексикографическом порядке
  26. func nextPass(b []byte) {
  27.     for i := len(b) - 1; i >= 0; i-- {
  28.         b[i] = nextByte(b[i])
  29.         if b[i] != '0' {
  30.             return
  31.         }
  32.     }
  33. }
  34.  
  35. // worker по порядку генерирует пароли и сравнивает хэш каждого пароля с искомым
  36. func worker(b []byte) string {
  37.     for md5.Sum(b) != hash {
  38.         nextPass(b)
  39.     }
  40.     return string(b)
  41. }
  42.  
  43. func main() {
  44.     t := time.Now()
  45.     const hashString = "95ebc3c7b3b9f1d2c40fec14415d3cb8" // "zzzzz"
  46.     h, err := hex.DecodeString(hashString)
  47.     if err != nil {
  48.         log.Fatal(err)
  49.     }
  50.     copy(hash[:], h)
  51.     fmt.Println("Пароль: ", worker([]byte("00000")))
  52.     fmt.Println("Время поиска: ", time.Since(t))
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement