Senior
Έχουμε μια βάση δεδομένων με κωδικούς χρηστών, οι κωδικοί είναι hash (λειτουργία hashPassword), και γνωρίζουμε επίσης το σύνολο χαρακτήρων που μπορούν να χρησιμοποιηθούν στους κωδικούς (μεταβλητή alphabet). Το καθήκον μας είναι να υλοποιήσουμε τη λειτουργία RecoverPassword ώστε να ανακτήσει τον κωδικό από το γνωστό hash και να ολοκληρωθεί επιτυχώς το TestRecoverPassword. Βασικές απαιτήσεις: Οποιαδήποτε μέθοδος επιτρέπεται package main import ( "crypto/md5" "fmt" ) var alphabet = []rune{'a', 'b', 'c', 'd', '1', '2', '3'} func RecoverPassword(h []byte) string { return "" } func hashPassword(in string) []byte { h := md5.Sum([]byte(in)) return h[:] } func main() {
sobes.tech AI
Απάντηση από AI
Για την ανάκτηση κωδικού πρόσβασης με βάση ένα γνωστό hash MD5 και ένα δεδομένο αλφάβητο, πρέπει να δοκιμάσετε όλες τις πιθανές συνδυασμούς χαρακτήρων από το αλφάβητο, να υπολογίσετε το hash τους και να το συγκρίνετε με το δοσμένο hash. Όταν βρεθεί ταύτιση, επιστρέφεται ο βρεθείς κωδικός.
Παράδειγμα υλοποίησης με δοκιμές κωδικών μήκους από 1 έως ένα μέγιστο (π.χ., 5):
package main
import (
"crypto/md5"
"fmt"
)
var alphabet = []rune{'a', 'b', 'c', 'd', '1', '2', '3'}
func hashPassword(in string) []byte {
h := md5.Sum([]byte(in))
return h[:]
}
func RecoverPassword(h []byte) string {
maxLen := 5
var attempt func(pos int, current []rune) string
attempt = func(pos int, current []rune) string {
if pos == 0 {
// Έλεγχος τρέχοντος συνδυασμού
candidate := string(current)
if string(hashPassword(candidate)) == string(h) {
return candidate
}
return ""
}
for _, ch := range alphabet {
current[len(current)-pos] = ch
res := attempt(pos-1, current)
if res != "" {
return res
}
}
return ""
}
for length := 1; length <= maxLen; length++ {
current := make([]rune, length)
res := attempt(length, current)
if res != "" {
return res
}
}
return ""
}
func main() {
password := "abc1"
h := hashPassword(password)
recovered := RecoverPassword(h)
fmt.Printf("Αρχικό: %s, Ανακτημένο: %s\n", password, recovered)
}
Αυτός ο κώδικας δοκιμάζει όλες τις πιθανές κωδικούς μήκους έως 5 χαρακτήρων από το δοσμένο αλφάβητο, υπολογίζει το hash MD5 και το συγκρίνει με το δοσμένο. Όταν βρει ταύτιση, επιστρέφει τον κωδικό.
Λάβετε υπόψη ότι αυτή η μέθοδος brute-force μπορεί να είναι πολύ χρονοβόρα αν το αλφάβητο και το μήκος του κωδικού είναι μεγάλα.