SHARE
TWEET

Go md5-bruteforce

a guest Mar 31st, 2015 527 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top