"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 비밀번호 관리자 구축하기: 2부

Go에서 비밀번호 관리자 구축하기: 2부

2024-11-01에 게시됨
검색:562

Go에서 비밀번호 관리자를 구축하는 여정에 다시 오신 것을 환영합니다! 이번 두 번째 기사에서는 초기 커밋 이후 진행 상황을 살펴보겠습니다. 새로운 기능을 추가하고, 코드 구조를 개선하고, 테스트를 구현했습니다. 뛰어들어 보세요!

프로젝트 구조 발전

가장 먼저 눈에 띄는 변화 중 하나는 향상된 프로젝트 구조입니다. Go의 모범 사례에 따라 코드를 여러 파일과 패키지로 분리했습니다.

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

이 구조를 사용하면 프로젝트가 성장함에 따라 더 나은 구성과 유지 관리가 가능해집니다.

향상된 명령줄 인터페이스

CLI를 대폭 개선하여 더욱 유연하고 사용자 친화적으로 만들었습니다. 다음은 main.go의 일부입니다:

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

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

이 설정은 현재 generate 명령을 지원하는 하위 명령을 허용합니다. 이제 사용자는 다음과 같이 도구와 상호 작용할 수 있습니다.

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

맞춤형 비밀번호 생성

비밀번호 생성을 맞춤설정하는 옵션을 추가했습니다. 이제 사용자는 비밀번호 길이를 지정하고 특수 문자를 제외하도록 선택할 수 있습니다:

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)
}

이 기능을 사용하면 사용자는 -n과 같은 플래그를 사용하여 기호를 제외하고 -c를 사용하여 암호를 표시하는 대신 클립보드에 복사할 수 있습니다.

향상된 비밀번호 생성 알고리즘

새로운 사용자 정의 옵션을 처리할 수 있도록 비밀번호 생성 기능을 개선했습니다.

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 


이 기능은 이제 noSymbols 플래그를 준수하므로 보다 유연한 비밀번호 생성이 가능합니다.

테스트 구현

우리는 테스트를 구현하여 코드의 신뢰성을 보장하기 위한 중요한 조치를 취했습니다. 다음은 테스트 파일의 일부입니다.

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)
    }
}

이 테스트에서는 비밀번호 길이가 정확하고 특수 문자가 포함되어 있는지 확인합니다. 흥미롭게도 특수 문자 테스트를 통해 개선이 필요한 부분이 드러났습니다. 생성된 10,000개의 비밀번호 중 234개에는 특수 문자가 포함되어 있지 않았습니다. 이는 우리의 다음 개선을 위한 명확한 방향을 제시합니다.

다음은 무엇입니까?

우리는 상당한 진전을 이루었지만 여전히 개선의 여지가 있습니다.

  1. 일관되게 특수 문자가 포함되도록 비밀번호 생성 알고리즘을 개선합니다.
  2. 비밀번호 저장 기능을 구현합니다.
  3. 저장된 비밀번호에 암호화를 추가합니다.
  4. 검색 및 검색 기능을 개발합니다.

이러한 문제를 해결하고 비밀번호 관리자를 계속해서 발전시켜 나갈 시리즈의 다음 부분을 계속 지켜봐 주시기 바랍니다!

전체 소스 코드는 GitHub에서 확인할 수 있습니다. 자유롭게 프로젝트를 복제하고 포크하고 기여해 보세요. 여러분의 피드백과 기여는 언제나 환영입니다!

즐거운 코딩을 즐기시고 보안을 유지하세요! ??

Building a Password Manager in Go: Part 2 스베마라주 / 도스트

Go로 작성된 dost 명령줄 비밀번호 관리자

도스트

dost는 Go로 작성된 CLI 비밀번호 관리자입니다.

(Pass)에서 영감을 얻음[https://www.passwordstore.org/]

특징

  • 구성 가능한 길이의 무작위 비밀번호 생성
  • 생성된 비밀번호를 클립보드에 자동으로 복사
  • 기호 사용 건너뛰기

용법

> go build -o dost main.go
전체 화면 모드로 전환 전체 화면 모드 종료

비밀번호 생성 중:

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

지정된 길이의 비밀번호 생성(기본값은 25):

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

생성된 비밀번호를 인쇄하지 않고 클립보드에 복사:

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

비밀번호 생성에 기호를 사용하지 마세요.

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

개발 중

  • 새 비밀번호를 수동으로 삽입
  • 기존 비밀번호 표시
  • 모든 항목 나열
  • 비밀번호 저장
  • GPG 키 기반 암호화

특허

MIT




GitHub에서 보기


릴리스 선언문 이 글은 https://dev.to/svemaraju/building-a-password-manager-in-go-part-2-5adf?1 에서 복제되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3