Sobes.tech
Senior

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() { tests := []string{"a", "12", "abc333d"} ok := true for _, exp := range tests { h := hashPassword(exp) act := RecoverPassword(h) if act != exp { fmt.Printf("Қате: күтілгені %q, алынғаны %q\n", exp, act) ok = false } } if ok { fmt.Println("Барлық тесттер сәтті өтті") } } Дұрыс орындалуы үшін кодқа: кіріс нүктесі -- main функциясы main пакетінен Міндеті: RecoverPassword функциясын жүзеге асыру, ол MD5-хэш бойынша бастапқы парольді қалпына келтіреді, ол берілген алфавиттен таңбалардан тұрады.

sobes.tech AI

AI-дан жауап

RecoverPassword функциясы берілген алфавиттен барлық мүмкін комбинацияларды қайталап, олардың MD5-хэшін берілгенмен салыстырады. Алфавит шағын болғандықтан және құпиясөздің ұзындығы айқын шектелмегендіктен, қайталау ұзындығын шектеу орынды (мысалы, тесттерде 7 таңбаға дейін).

Қайталамалы іздеудің рекурсивті жүзеге асырылуының мысалы:

func RecoverPassword(h []byte) string {
	var res string
	var found bool
	var dfs func(current []rune)
	
	dfs = func(current []rune) {
		if found {
			return
		}
		if len(current) > 0 {
			if string(hashPassword(string(current))) == string(h) {
				res = string(current)
				found = true
				return
			}
		}
		if len(current) == 7 { // ұзындық шегі
			return
		}
		for _, c := range alphabet {
			dfs(append(current, c))
		}
	}
	
	dfs([]rune{})
	return res
}

Мұндай қайталау пароль алфавиттен тұрады және ұзындығы 7-ден аспайды деген жағдайда парольды табуға кепілдік береді. Үлкен парольдер немесе алфавиттер үшін тиімдірек әдіс қажет болуы мүмкін, бірақ бұл тапсырма мен тесттер үшін жеткілікті.