"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Construindo um gerenciador de senhas em Go

Construindo um gerenciador de senhas em Go

Publicado em 2024-11-08
Navegar:857

Como desenvolvedor de software, sempre fui fascinado pela interseção entre segurança e usabilidade. Recentemente, decidi embarcar em um projeto interessante: criar um gerenciador de senhas de linha de comando usando Go. Quero compartilhar com vocês o início dessa jornada, começando pelo primeiro commit.

O Gênesis

Em 27 de novembro de 2023, fiz o commit inicial do meu projeto, que chamei de "dost" (amigo em hindi, refletindo seu papel como um companheiro útil para gerenciamento de senhas). Este primeiro passo, embora pequeno, estabelece as bases para o que espero que se torne uma ferramenta robusta e fácil de usar.

Inspiração e Visão

Building a Password Manager in Go

Ao embarcar neste projeto, me inspirei no popular gerenciador de senhas de linha de comando. A simplicidade e eficácia do pass chamaram minha atenção e decidi usar sua API como modelo para construir meu próprio gerenciador de senhas em Go.

Mergulhar no código-fonte do passe foi uma experiência reveladora. Fiquei intrigado ao descobrir que toda a funcionalidade desta ferramenta amplamente utilizada está encapsulada em um script Bash abrangente. Essa simplicidade elegante é algo que admiro e espero imitar em meu próprio projeto, embora usando os pontos fortes do Go.

Ao estudar o passe, obtive insights valiosos sobre os recursos essenciais de um gerenciador de senhas de linha de comando e a experiência do usuário que ele deve fornecer. À medida que continuo desenvolvendo o "dost", manterei essas lições em mente, com o objetivo de criar uma ferramenta que combine a simplicidade do passe com os benefícios de desempenho e compatibilidade entre plataformas do Go.

Essa exploração não apenas forneceu um roteiro para implementação de recursos, mas também reforçou minha crença no poder de ferramentas bem elaboradas e focadas. Estou animado para ver como essa inspiração moldará a evolução do "dost" nos próximos estágios de desenvolvimento.

Primeiros recursos

O commit inicial focou em duas funcionalidades principais:

  1. Geração de senha: Implementei um gerador de senha básico que permite aos usuários especificar o comprimento de senha desejado. Este recurso tem como objetivo criar senhas fortes e aleatórias, adaptadas a vários requisitos de segurança.

  2. Integração com a área de transferência: Para aprimorar a experiência do usuário, garanti que a senha gerada seja copiada automaticamente para a área de transferência. Esse recurso pequeno, mas crucial, economiza tempo e reduz o risco de erros de transcrição.

Informações Técnicas

Vamos mergulhar em alguns dos aspectos técnicos desta primeira iteração:

  • Versão Go: O projeto é construído usando Go 1.21.0, aproveitando a simplicidade e eficiência da linguagem.
  • Dependências externas: estou usando o pacote github.com/atotto/clipboard para lidar perfeitamente com operações da área de transferência em diferentes sistemas operacionais.
  • Geração Aleatória: A geração de senha utiliza o pacote crypto/rand do Go para geração segura de números aleatórios, crucial para a criação de senhas fortes e imprevisíveis.
  • Conjunto de caracteres: O gerador de senha inclui letras maiúsculas e minúsculas, dígitos e uma variedade de caracteres especiais para garantir a complexidade.

Trechos de código

Vejamos algumas partes importantes da implementação:

  1. Função de geração de senha:
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 função cria uma senha selecionando aleatoriamente caracteres de um conjunto predefinido, garantindo uma mistura de letras maiúsculas, minúsculas, dígitos e caracteres especiais.

  1. Integração da área de transferência:
func writeToClipboard(text string) error {
    return clipboard.WriteAll(text)
}

Esta função simples utiliza o pacote da área de transferência para gravar a senha gerada na área de transferência do sistema.

  1. Função 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")
}

A função principal une tudo. Ele usa o pacote flag do Go para permitir que os usuários especifiquem o comprimento da senha, gerem a senha e a copiem para a área de transferência.

Interface de linha de comando

Como você pode ver na função principal, implementei uma CLI simples usando o pacote flag do Go. Os usuários podem especificar o comprimento desejado da senha usando o sinalizador -length, com um padrão de 12 caracteres, se não for especificado.

Olhando para o futuro

Este primeiro commit é apenas o começo. À medida que continuo desenvolvendo este gerenciador de senhas, pretendo adicionar recursos como:

  • Armazenamento seguro de senhas
  • Criptografia de dados armazenados
  • Funcionalidades de pesquisa e recuperação
  • Análise da força da senha

Estou entusiasmado com a jornada que temos pela frente e com os desafios que ela trará. Construir um gerenciador de senhas não envolve apenas codificação; trata-se de compreender os princípios de segurança, as necessidades do usuário e criar uma ferramenta na qual as pessoas possam confiar suas informações confidenciais.

Fique ligado para mais atualizações à medida que este projeto evolui. Estarei compartilhando meu progresso, desafios e aprendizados ao longo do caminho. Se você estiver interessado em acompanhar ou contribuir, fique à vontade para conferir o projeto no GitHub.

Building a Password Manager in Go svemaraju / dost

gerenciador de senhas de linha de comando dost escrito em Go

dost

dost é um gerenciador de senhas CLI escrito em Go.

Inspirado por (Passe)[https://www.passwordstore.org/]

Características

  • Gere senhas aleatórias de tamanho configurável
  • Copiar senhas geradas para a área de transferência automaticamente
  • Ignorar o uso de símbolos

Uso

> go build -o dost main.go
Entrar no modo de tela cheiaSair do modo de tela cheia

Gerando senha:

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

Gerando senha com comprimento especificado (o padrão é 25):

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

Copiar a senha gerada para a área de transferência sem imprimir:

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

Evite símbolos para geração de senhas:

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

Em desenvolvimento

  • Insira uma nova senha manualmente
  • Mostrar uma senha existente
  • Listar todas as entradas
  • Armazenamento de senha
  • Criptografia baseada em chave GPG

Licença

MIT




Ver no GitHub


Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/svemaraju/building-a-password-manager-in-go-31jo?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3