"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 > Construyendo un administrador de contraseñas en Go

Construyendo un administrador de contraseñas en Go

Publicado el 2024-11-08
Navegar:546

Como desarrollador de software, siempre me ha fascinado la intersección entre seguridad y usabilidad. Recientemente, decidí embarcarme en un proyecto apasionante: crear un administrador de contraseñas de línea de comandos usando Go. Quiero compartir contigo el comienzo de este viaje, comenzando con el primer compromiso.

El Génesis

El 27 de noviembre de 2023, realicé la confirmación inicial para mi proyecto, al que llamé "dost" (amigo en hindi, lo que refleja su función como compañero útil para la administración de contraseñas). Este primer paso, aunque pequeño, sienta las bases de lo que espero se convierta en una herramienta sólida y fácil de usar.

Inspiración y visión

Building a Password Manager in Go

Mientras me embarcaba en este proyecto, me inspiré en el popular administrador de contraseñas de línea de comandos. La simplicidad y efectividad de Pass me llamaron la atención y decidí usar su API como modelo para crear mi propio administrador de contraseñas en Go.

Profundizar en el código fuente de Pass fue una experiencia reveladora. Me intrigó descubrir que toda la funcionalidad de esta herramienta ampliamente utilizada está encapsulada en un script Bash completo. Esta elegante simplicidad es algo que admiro y espero emular en mi propio proyecto, aunque utilizando los puntos fuertes de Go.

Al estudiar Pass, obtuve información valiosa sobre las características esenciales de un administrador de contraseñas de línea de comandos y la experiencia de usuario que debe brindar. A medida que continúe desarrollando "dost", tendré en cuenta estas lecciones, con el objetivo de crear una herramienta que combine la simplicidad de pass con el rendimiento y los beneficios de compatibilidad multiplataforma de Go.

Esta exploración no solo ha proporcionado una hoja de ruta para implementar funciones, sino que también ha reforzado mi creencia en el poder de las herramientas enfocadas y bien diseñadas. Estoy emocionado de ver cómo esta inspiración dará forma a la evolución de "dost" en las próximas etapas de desarrollo.

Primeras características

El compromiso inicial se centró en dos funcionalidades principales:

  1. Generación de contraseñas: Implementé un generador de contraseñas básico que permite a los usuarios especificar la longitud de contraseña deseada. Esta función tiene como objetivo crear contraseñas seguras y aleatorias adaptadas a diversos requisitos de seguridad.

  2. Integración del portapapeles: Para mejorar la experiencia del usuario, me aseguré de que la contraseña generada se copie automáticamente en el portapapeles. Esta pequeña pero crucial característica ahorra tiempo y reduce el riesgo de errores de transcripción.

Información técnica

Profundicemos en algunos de los aspectos técnicos de esta primera iteración:

  • Versión Go: El proyecto se creó utilizando Go 1.21.0, aprovechando la simplicidad y eficiencia del lenguaje.
  • Dependencias externas: estoy usando el paquete github.com/atotto/clipboard para manejar las operaciones del portapapeles en diferentes sistemas operativos sin problemas.
  • Generación aleatoria: La generación de contraseñas utiliza el paquete crypto/rand de Go para la generación segura de números aleatorios, crucial para crear contraseñas seguras e impredecibles.
  • Conjunto de caracteres: El generador de contraseñas incluye letras mayúsculas y minúsculas, dígitos y una variedad de caracteres especiales para garantizar la complejidad.

Fragmentos de código

Veamos algunas partes clave de la implementación:

  1. Función de generación de contraseña:
func generatePassword(length int) (string, error) {
    const (
        uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
        digits           = "0123456789"
        specialChars     = "!@#$%^&*()-_= []{}|;:'\",./?"
    )

    allChars := uppercaseLetters   lowercaseLetters   digits   specialChars

    var password string
    for i := 0; i 


Esta función crea una contraseña seleccionando aleatoriamente caracteres de un conjunto predefinido, lo que garantiza una combinación de mayúsculas, minúsculas, dígitos y caracteres especiales.

  1. Integración del portapapeles:
func writeToClipboard(text string) error {
    return clipboard.WriteAll(text)
}

Esta función sencilla utiliza el paquete del portapapeles para escribir la contraseña generada en el portapapeles del sistema.

  1. Función principal:
func main() {
    passwordLength := flag.Int("length", 12, "length of your password")
    flag.Parse()

    password, err1 := generatePassword(*passwordLength)
    if err1 != nil {
        fmt.Println("Error generating password:", err1)
        return
    }

    fmt.Println("Generated Password:", password)

    err2 := writeToClipboard(password)
    if err2 != nil {
        fmt.Println("Error writing to clipboard:", err2)
        os.Exit(1)
    }

    fmt.Println("Copied to clipboard! ✅\n")
}

La función principal une todo. Utiliza el paquete de indicadores de Go para permitir a los usuarios especificar la longitud de la contraseña, genera la contraseña y la copia en el portapapeles.

Interfaz de línea de comandos

Como puede ver en la función principal, implementé una CLI simple usando el paquete de banderas de Go. Los usuarios pueden especificar la longitud de la contraseña deseada utilizando el indicador -length, con un valor predeterminado de 12 caracteres si no se especifica.

Mirando hacia el futuro

Esta primera confirmación es solo el comienzo. A medida que sigo desarrollando este administrador de contraseñas, planeo agregar funciones como:

  • Almacenamiento seguro de contraseñas
  • Cifrado de datos almacenados
  • Funcionalidades de búsqueda y recuperación
  • Análisis de seguridad de la contraseña

Estoy entusiasmado con el viaje que tenemos por delante y los desafíos que traerá. Crear un administrador de contraseñas no se trata solo de codificar; se trata de comprender los principios de seguridad, las necesidades de los usuarios y crear una herramienta en la que las personas puedan confiar su información confidencial.

Estén atentos para más actualizaciones a medida que este proyecto evolucione. Estaré compartiendo mis avances, desafíos y aprendizajes a lo largo del camino. Si está interesado en seguirnos o contribuir, no dude en consultar el proyecto en GitHub.

Building a Password Manager in Go 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 completaSalir 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-31jo?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Ú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