BRUTE Logo Burger
Tutoriel, utilisation et démonstration du brute-force en Golang
  • Installer et compiler une application en Go
  • Comprendre l'algorithme de brute-force
  • L'utiliser sur un mot de passe hashé
  • Comparaison des vitesses entre Go et les autres langages
Commencer Dépôt GitHub

Bien entendu toute utilisation de ces algorithmes à des fins de piraterie est ILLEGAL, je ne suis en aucun cas responsable de votre bêtise.

Qu'est-ce que le Golang (alias le Go) ?

Le Go, ou Golang, est un langage de programmation open source et développer par Google visant à faciliter la programmation d'applications ou de scripts tout en alliant vitesse de développement et vitesse d'exécution.

Les concepts de base

Le Hello World

Voici un petit exemple d'Hello World en Go :

Go
0 1 2 3 4 5 6 7 8 9 10
// Definition du package
package main

// Import des libs
import "fmt"

// Point d'entree
func main() {
    // Print
    fmt.Println("Hello Word !")
}

Les variables

En Go, tout comme en Python, on peut préciser ou non le type des variables, cependant le type importe lors d'opérations :

Go
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
// Les chaines de caracteres
var a = "BlaBlaBla"
fmt.Println(a)
// Resultat : BlaBlaBla


// Definir et afficher plusieurs entiers simultanement
var b, c int = 1, 2
fmt.Println(b, c)
// Resultat : 1 2


// Les booleen
var d = true
fmt.Println(d)
// Resultat : true


// Les valeurs par defaut
var e int
fmt.Println(e)
// Resultat : 0


// Definition plus courte
f := "apple"
fmt.Println(f)
// Resultat : apple


// Les tableaux statiques
var g [2]string
g[0] = "My Boy"
fmt.Println(g[0])
// Resultat : My Boy


// Les tableaux dynamique
h := make([]int, 0)
h = append(h, 123)
fmt.Println(h[0])
// Resultat : 123

Les conditions

Pour le Go, pas besoin de parenthèse pour les conditions, cependant les accolades sont nécessaires :

Go
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
// Condition simple
// La variable n sera accessible dans le bloc au dessus de la condition
n := 66

if n > 50 {
    fmt.Println("C'est plus grand que 50 !")
} else if n < 50 {
    fmt.Println("C'est plus petit que 50 !")
} else {
    fmt.Println("C'est egal a 50 !")
}


// Condition portee
// La variable n ne sera accessible que dans chaque bloc de la condition
if n := 66; n > 50 {
    fmt.Println("C'est plus grand que 50 !")
} else if n < 50 {
    fmt.Println("C'est plus petit que 50 !")
} else {
    fmt.Println("C'est egal a 50 !")
}

Les boucles

Un seul type de boucle existe en Go, la boucle for, elle a cependant deux syntaxes différentes :

Go
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// Boucle tournant a l'infini, ou du moins jusqu'a un break
n := 0
for {
    if n == 10 {
        break
    }
    fmt.Printf("La variable n vaut %d !", n)
    n++
}


// Boucle tournant un nombre precis de fois
t := 10
for n := 0; n < 10; n++ {
    fmt.Printf("La variable n vaut %d !", n)
}

Les fonctions

À la manière du C, le Go utilise des fonctions avec un type de paramètres et un type de retour :

Go
0 1 2 3 4 5 6
a, b := swap("Thibault", "Bustos")
fmt.Println(a, b)
// Resultat : Bustos Thibault

func swap(x, y string) (string, string) {
    return y, x
}