Генератор защищенных паролей на 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)
	}
}

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.

Регулярно требуйте от пользователей обновление паролей.

Все эти меры вместе обеспечивают более высокий уровень безопасности паролей.

Похожие записи