"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Creación de un administrador de contraseñas en Go: Parte 2

Creación de un administrador de contraseñas en Go: Parte 2

Publicado el 2024-11-01
Navegar:795

¡Bienvenido de nuevo a nuestro viaje para crear un administrador de contraseñas en Go! En esta segunda entrega, exploraremos el progreso que hemos logrado desde nuestro compromiso inicial. Agregamos nuevas funciones, mejoramos la estructura del código e implementamos pruebas. ¡Vamos a sumergirnos!

Evolución de la estructura del proyecto

Uno de los primeros cambios que notarás es la estructura mejorada del proyecto. Hemos separado nuestro código en varios archivos y paquetes, siguiendo las mejores prácticas de Go:

dost/
.
├── LICENSE
├── README.md
├── go.mod
├── go.sum
├── internal
│   ├── internal_test.go
│   └── passgen.go
└── main.go

Esta estructura permite una mejor organización y mantenibilidad a medida que nuestro proyecto crece.

Interfaz de línea de comandos mejorada

Hemos mejorado significativamente nuestra CLI, haciéndola más flexible y fácil de usar. Aquí hay un fragmento de nuestro main.go:

func main() {
    generateCmd := flag.NewFlagSet("generate", flag.ExitOnError)
    flag.Parse()

    switch os.Args[1] {
    case "generate":
        internal.Generate(generateCmd)
    }
}

Esta configuración permite subcomandos y actualmente admite el comando generar. Los usuarios ahora pueden interactuar con nuestra herramienta de esta manera:

go run main.go generate email/[email protected] 15

Generación de contraseña personalizable

Hemos agregado opciones para personalizar la generación de contraseñas. Los usuarios ahora pueden especificar la longitud de la contraseña y optar por excluir caracteres especiales:

func Generate(generateFlags *flag.FlagSet) {
    generateFlags.BoolVar(&noSymbols, "n", false, "Skip symbols while generating password")
    generateFlags.BoolVar(&copyToClipBoard, "c", false, "Copy to clipboard.")
    generateFlags.Parse(os.Args[2:])
    passwordLength := 25
    // ... (code to parse custom length)

    password, err := generatePassword(passwordLength, noSymbols)
    // ... (code to handle password output)
}

Esta función permite a los usuarios usar indicadores como -n para excluir símbolos y -c para copiar la contraseña al portapapeles en lugar de mostrarla.

Algoritmo de generación de contraseñas mejorado

Hemos perfeccionado nuestra función de generación de contraseñas para manejar las nuevas opciones de personalización:

func generatePassword(length int, noSymbols bool) (string, error) {
    const (
        uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
        digits           = "0123456789"
        specialChars     = "!@#$%^&*()-_= []{}|;:'\",./?"
    )

    allChars := uppercaseLetters   lowercaseLetters   digits
    if !noSymbols {
        allChars  = specialChars
    }

    var password string
    for i := 0; i 


Esta función ahora respeta el indicador noSymbols, lo que permite una generación de contraseñas más flexible.

Implementación de pruebas

Hemos dado un paso importante para garantizar la confiabilidad de nuestro código mediante la implementación de pruebas. Aquí hay un fragmento de nuestro archivo de prueba:

func TestPasswordLength(t *testing.T) {
    password, err := generatePassword(10, true)
    if err != nil {
        t.Errorf("Expected no error, got %v", err)
    } else {
        if len(password) != 10 {
            t.Errorf("Expected 10 character password, got %d", len(password))
        }
    }
}

func TestSpecialCharacter10K(t *testing.T) {
    splCharMissing := 0
    for i := 1; i  0 {
        t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing)
    }
}

Estas pruebas verifican la longitud correcta de la contraseña y la inclusión de caracteres especiales. Curiosamente, nuestra prueba de caracteres especiales reveló un área de mejora: de 10.000 contraseñas generadas, 234 no contenían caracteres especiales. Esto nos da una dirección clara para nuestro próximo perfeccionamiento.

¿Qué sigue?

Si bien hemos logrado avances significativos, todavía hay margen de mejora:

  1. Refina el algoritmo de generación de contraseñas para garantizar la inclusión consistente de caracteres especiales.
  2. Implementar la funcionalidad de almacenamiento de contraseñas.
  3. Agregar cifrado para las contraseñas almacenadas.
  4. Desarrollar funciones de búsqueda y recuperación.

¡Estén atentos a la siguiente parte de nuestra serie, donde abordaremos estos desafíos y continuaremos evolucionando nuestro administrador de contraseñas!

Recuerde, el código fuente completo está disponible en GitHub. Siéntete libre de clonar, bifurcar y contribuir al proyecto. ¡Tus comentarios y contribuciones siempre son bienvenidos!

¡Feliz codificación y mantente seguro! ??

Building a Password Manager in Go: Part 2 svemaraju / dos

administrador de contraseñas de línea de comando dost escrito en Go

dost

dost es un administrador de contraseñas CLI escrito en Go.

Inspirado en (Pass)[https://www.passwordstore.org/]

Características

  • Generar contraseñas aleatorias de longitud configurable
  • Copiar contraseñas generadas al portapapeles automáticamente
  • Omitir el uso de símbolos

Uso

> go build -o dost main.go
Ingresar al modo de pantalla completa Salir del modo de pantalla completa

Generando contraseña:

> ./dost generate email/[email protected]
Generated Password: );XE,7-Dv?)Aa &

Generando contraseña con una longitud especificada (el valor predeterminado es 25):

> ./dost generate email/[email protected] 12
Generated Password: si

Copiar la contraseña generada al portapapeles sin imprimir:

> ./dost generate -c email/[email protected] 
Copied to clipboard! ✅

Evitar símbolos para generar contraseñas:

> ./dost generate -n email/[email protected] 
Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>H

En desarrollo

  • Insertar una nueva contraseña manualmente
  • Mostrar una contraseña existente
  • Enumerar todas las entradas
  • Almacenamiento de contraseñas
  • Cifrado basado en clave GPG

Licencia

MIT




Ver en GitHub


Declaración de liberación Este artículo se reproduce en: https://dev.to/svemaraju/building-a-password-manager-in-go-part-2-5adf?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3