{"id":16844537,"url":"https://github.com/jedib0t/go-passwords","last_synced_at":"2026-01-06T06:14:37.570Z","repository":{"id":229341928,"uuid":"776497438","full_name":"jedib0t/go-passwords","owner":"jedib0t","description":"Passphrase \u0026 Password Generator for GoLang","archived":false,"fork":false,"pushed_at":"2024-11-18T19:18:08.000Z","size":268,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-27T15:07:12.668Z","etag":null,"topics":["golang","odometer","passphrase-generator","passphrases","password-generator","passwords"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jedib0t.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-23T17:13:00.000Z","updated_at":"2025-03-26T14:28:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"7ea1af68-621d-4847-a3bd-11bb77b24531","html_url":"https://github.com/jedib0t/go-passwords","commit_stats":null,"previous_names":["jedib0t/go-passwords"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/jedib0t/go-passwords","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedib0t%2Fgo-passwords","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedib0t%2Fgo-passwords/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedib0t%2Fgo-passwords/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedib0t%2Fgo-passwords/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jedib0t","download_url":"https://codeload.github.com/jedib0t/go-passwords/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jedib0t%2Fgo-passwords/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262279162,"owners_count":23286550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","odometer","passphrase-generator","passphrases","password-generator","passwords"],"created_at":"2024-10-13T12:55:54.209Z","updated_at":"2026-01-06T06:14:37.564Z","avatar_url":"https://github.com/jedib0t.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-passwords\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/jedib0t/go-passwords/v0.svg)](https://pkg.go.dev/github.com/jedib0t/go-passwords)\n[![Build Status](https://github.com/jedib0t/go-passwords/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/jedib0t/go-passwords/actions?query=workflow%3ACI+event%3Apush+branch%3Amain)\n[![Coverage Status](https://coveralls.io/repos/github/jedib0t/go-passwords/badge.svg?branch=main)](https://coveralls.io/github/jedib0t/go-passwords?branch=main)\n[![Go Report Card](https://goreportcard.com/badge/github.com/jedib0t/go-passwords)](https://goreportcard.com/report/github.com/jedib0t/go-passwords)\n\nA high-performance Go library for generating secure passphrases and passwords with extensive customization options.\n\n## Passphrases\n\nPassphrases combine 2+ words with separators, optionally capitalized and with numbers. They're easier to remember than passwords while maintaining security.\n\n**Features:**\n- Capitalize words (e.g., `foo` → `Foo`)\n- Custom dictionaries or built-in English dictionary\n- Configurable word count (2-32 words)\n- Optional random number insertion\n- Custom separators\n- Word length filtering\n\n### Example\n```golang\n\tg, err := passphrase.NewGenerator(\n\t\tpassphrase.WithCapitalizedWords(true),\n\t\tpassphrase.WithDictionary(dictionaries.English()),\n\t\tpassphrase.WithNumWords(3),\n\t\tpassphrase.WithNumber(true),\n\t\tpassphrase.WithSeparator(\"-\"),\n\t\tpassphrase.WithWordLength(4, 6),\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfor i := 1; i \u003c= 10; i++ {\n\t\tfmt.Printf(\"Passphrase #%3d: %#v\\n\", i, g.Generate())\n\t}\n```\n\u003cdetails\u003e\n\u003csummary\u003eOutput...\u003c/summary\u003e\n\u003cpre\u003e\nPassphrase #  1: \"Peage6-Blousy-Whaup\"\nPassphrase #  2: \"Crape0-Natter-Pecs\"\nPassphrase #  3: \"Facers-Razzed-Jupes6\"\nPassphrase #  4: \"Jingko1-Shell-Stupor\"\nPassphrase #  5: \"Nailer-Turgid-Sancta4\"\nPassphrase #  6: \"Rodeo5-Cysts-Pinons\"\nPassphrase #  7: \"Mind-Regina-Swinks9\"\nPassphrase #  8: \"Babas5-Lupous-Xylems\"\nPassphrase #  9: \"Ocreae-Fusel0-Jujube\"\nPassphrase # 10: \"Mirks6-Woofer-Lase\"\n\u003c/pre\u003e\n\u003c/details\u003e\n\n## Passwords\n\nGenerate cryptographically secure random passwords with fine-grained character requirements.\n\n**Features:**\n- Custom character sets with ambiguity/duplicate filtering\n- Configurable length\n- Minimum lower-case character requirements\n- Minimum upper-case character requirements\n- Symbol count range (min/max)\n\n### Example\n```golang\n\tg, err := password.NewGenerator(\n\t\tpassword.WithCharset(charset.AllChars.WithoutAmbiguity().WithoutDuplicates()),\n\t\tpassword.WithLength(12),\n\t\tpassword.WithMinLowerCase(5),\n\t\tpassword.WithMinUpperCase(2),\n\t\tpassword.WithNumSymbols(1, 1),\n\t)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfor i := 1; i \u003c= 10; i++ {\n\t\tfmt.Printf(\"Password #%3d: %#v\\n\", i, g.Generate())\n\t}\n```\n\u003cdetails\u003e\n\u003csummary\u003eOutput...\u003c/summary\u003e\n\u003cpre\u003e\nPassword #  1: \"jQwRvL#oye7q\"\nPassword #  2: \"T2WRwSbwghc^\"\nPassword #  3: \"S@DxkUwkunhy\"\nPassword #  4: \"NJ4wxhSygLm\u0026\"\nPassword #  5: \"phHfuqw*uAPq\"\nPassword #  6: \"$3XDCoLXdeqq\"\nPassword #  7: \"enzB*ENGhsQm\"\nPassword #  8: \"ioCfs\u0026cLJgyd\"\nPassword #  9: \"obwEEEthM$MC\"\nPassword # 10: \"kmQVb\u0026fPqexj\"\n\u003c/pre\u003e\n\u003c/details\u003e\n\n## Enumerator\n\nSystematically enumerate all possible string combinations from a character set and length. Useful for brute-force testing, password cracking research, or exhaustive search scenarios.\n\n**Features:**\n- Efficient iteration through all combinations\n- Jump to specific positions\n- Increment/decrement by N steps\n- Optional rollover mode\n- Zero-allocation operations (after initial setup)\n\n### Example\n```golang\n\to := enumerator.New(charset.AlphabetsUpper, 8)\n\n\tfor i := 1; i \u003c= 10; i++ {\n\t\tfmt.Printf(\"Combination #%3d: %#v\\n\", i, o.String())\n\t\tif o.AtEnd() {\n\t\t\tbreak\n\t\t}\n\t\to.Increment()\n\t}\n```\n\u003cdetails\u003e\n\u003csummary\u003eOutput...\u003c/summary\u003e\n\u003cpre\u003e\nCombination #  1: \"AAAAAAAA\"\nCombination #  2: \"AAAAAAAB\"\nCombination #  3: \"AAAAAAAC\"\nCombination #  4: \"AAAAAAAD\"\nCombination #  5: \"AAAAAAAE\"\nCombination #  6: \"AAAAAAAF\"\nCombination #  7: \"AAAAAAAG\"\nCombination #  8: \"AAAAAAAH\"\nCombination #  9: \"AAAAAAAI\"\nCombination # 10: \"AAAAAAAJ\"\n\u003c/pre\u003e\n\u003c/details\u003e\n\n## Performance\n\nBenchmarked on AMD Ryzen 9 9950X3D:\n\n| Operation | Time | Allocations |\n|-----------|------|-------------|\n| **Enumerator** | | |\n| Increment/Decrement | ~17 ns/op | 0 B/op, 0 allocs/op |\n| IncrementN/DecrementN | ~110 ns/op | 0 B/op, 0 allocs/op |\n| String | ~16 ns/op | 0 B/op, 0 allocs/op |\n| **Password Generation** | ~117 ns/op | 40 B/op, 2 allocs/op |\n| **Passphrase Generation** | ~160 ns/op | 144 B/op, 5 allocs/op |\n\nRun benchmarks: `go test -bench=. -benchmem ./enumerator ./passphrase ./password`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjedib0t%2Fgo-passwords","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjedib0t%2Fgo-passwords","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjedib0t%2Fgo-passwords/lists"}