Я нахожусь в процессе создания программы для подбора паролей с помощью golang. Формат хэшей пароля - это хэш md5, примененный 1000x к исходному паролю, а затем используемый. (Код, который я показываю, только применяет это 5x)
md5 (md5 (md5 (md5 (.... (md5 (пароль))))))
func hash(pw string) string {
hasher := md5.New()
data := []byte(pw)
fmt.Printf("Initial data: %s\n", pw)
for i := 0; i < 5; i++ {
hasher.Reset()
hasher.Write(data)
sum := hasher.Sum(nil)
data = sum[:]
fmt.Printf("Iteration %x has the hash: %x\n", i+1, data)
}
return hex.EncodeToString(data)
}
Результат от этого отличается от того, что дает утилита командной строки md5sum. Моя другая попытка была использовать, потому что это было без сохранения состояния, но я все еще начинаю отклоняться во втором раунде хеширования
sum := md5.Sum([]byte(data))
Каков хороший / успешный способ вычисления этого повторного хэша?