Senior
Kullanıcı şifreleriyle bir veritabanımız var, şifreler hash'lenmiş durumda (hashPassword fonksiyonu ile), ve şifrelerde kullanılabilecek karakterler kümesi de biliniyor (alphabet değişkeni). Görevimiz, bilinen hash'e göre şifreyi geri almak için RecoverPassword fonksiyonunu uygulamaktır ve TestRecoverPassword'un başarılı olmasını sağlamaktır. Temel gereksinimler: Herhangi bir yöntem kullanılabilir 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 yapay zeka
AI'dan gelen yanıt
Bilinen MD5 karma değeri ve belirli bir alfabeye göre şifreyi kurtarmak için, alfabedeki tüm olası karakter kombinasyonlarını denemek, bunların hash'ini hesaplamak ve verilen hash ile karşılaştırmak gerekir. Eşleşme bulunursa, bulunan şifre geri döndürülür.
Örnek uygulama, 1 ile belirli bir maksimum (örneğin 5) uzunluk arasındaki şifreleri denemek şeklindedir:
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 {
// Mevcut kombinasyonu kontrol et
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("Orijinal: %s, Kurtarılmış: %s\n", password, recovered)
}
Bu kod, verilen alfabeden 1 ile 5 karakter uzunluğundaki tüm olası şifreleri dener, onların MD5 hash'ini hesaplar ve verilen hash ile karşılaştırır. Eşleşme bulunursa, şifre geri döndürülür.
Unutmayın, bu yöntem büyük alfabeler ve uzun şifreler için çok zaman alıcı olabilir.