Генератор защищенных паролей на Go
Для генерации случайного пароля в Go вы можете использовать пакет math/rand
для инициализации генератора случайных чисел.
package main
import (
"crypto/rand"
"fmt"
"math/big"
)
func generateRandomLength() int {
// Генерация случайной длины от 10 до 15 символов
randomLength, err := rand.Int(rand.Reader, big.NewInt(6)) // 15 - 10 + 1 = 6
if err != nil {
panic(err)
}
return int(randomLength.Int64()) + 10
}
func generatePassword(length int) (string, error) {
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^,._?"
password := make([]byte, length)
for i := range password {
// Генерация случайного индекса для выбора символа из charset
randomIndex, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
if err != nil {
return "", err
}
password[i] = charset[randomIndex.Int64()]
}
return string(password), nil
}
func main() {
// Генерация 50 паролей со случайной длиной от 10 до 15 символов
for i := 0; i < 50; i++ {
length := generateRandomLength()
password, err := generatePassword(length)
if err != nil {
fmt.Println("Ошибка при генерации пароля:", err)
return
}
fmt.Printf("Пароль %d (длина %d): %s\n", i+1, length, password)
}
}
Вариант генератора случайных паролей в Go с использованием пакетов math/rand
вместе с time
для инициализации генератора случайных чисел.
package main
import (
"fmt"
"math/rand"
"time"
)
func generateRandomLength() int {
rand.Seed(time.Now().UnixNano())
return rand.Intn(6) + 10 // 15 - 10 + 1 = 6
}
func generatePassword(length int) string {
rand.Seed(time.Now().UnixNano())
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^,._?"
password := make([]byte, length)
for i := range password {
password[i] = charset[rand.Intn(len(charset))]
}
return string(password)
}
func main() {
rand.Seed(time.Now().UnixNano())
// Генерация 50 паролей со случайной длиной от 10 до 15 символов
for i := 0; i < 50; i++ {
length := generateRandomLength()
password := generatePassword(length)
fmt.Printf("Пароль %d (длина %d): %s\n", i+1, length, password)
}
}
Генерация паролей с использованием crypto/rand
и выбором случайных символов из заданного набора (в данном случае, латинские буквы верхнего и нижнего регистра, цифры, и некоторые спецсимволы) является хорошей практикой для создания стойких к перебору паролей. Однако, важно также учесть следующие моменты:
Длина пароля:
Длинные пароли в целом являются более стойкими к атакам перебора. Генерация паролей с разнообразной длиной, как в вашем случае (от 10 до 15 символов), улучшает безопасность.
Использование криптографически надежных функций:
Ваш код использует crypto/rand
, что является правильным выбором для генерации случайных чисел с высокой степенью надежности.
Уникальность паролей:
Генерируйте уникальные пароли для каждого пользователя. Избегайте использования стандартных или слабых паролей.
Хранение паролей:
Никогда не храните пароли в открытом виде. Всегда используйте хеширование с солью (salt) и подходящий алгоритм хеширования, такой как bcrypt.
Обновление паролей:
Регулярно требуйте от пользователей обновление паролей.
Все эти меры вместе обеспечивают более высокий уровень безопасности паролей.