The intention of this project is to provide a fast and secure way to generate one or more passwords using a CLI tool, a HTTPs page or a HTTPs API.
For the security of the passwords there are several assertions:
- The password may not contain pattern found on the keyboard or in alphabet
- The password must have 3 or 4 different character groups in it depending on whether special characters are requested
- The password may not have repeating characters
- The API generator does not transmit or store any data about the generated passwords
My service Secure Password is powered by this app and will provide you with secure passwords.
-
Download the compiled binary from Github releases
-
Generate your password:
$ ./password get -h generate and return a secure random password Usage: password get [flags] Flags: -d, --date prepend current date to XKCD style passwords (default true) -h, --help help for get -j, --json return output in JSON format -l, --length int length of the generated password (default 20) -n, --number int number of passwords to generate (default 1) -s, --special use special characters in your password -x, --xkcd use XKCD style password $ ./password get Vzupi4IaPbXmSQEX9A4e $ ./password get -l 32 -s }d.sks(4J$2G]x52=k)WAN{M68LxEg}% $ ./password get -l 4 -x 20190101.SeashellSupporterTumbleweedGeneral
/v1/getPassword
- Retrieve a password from the APIdate=true
- Set tofalse
no to prepend the date to XKCD-style passwordslength=20
- Specify the length of the password to generate (the API only supports values between 4 and 128 - for more characters use the CLI)special=false
- Set totrue
to enable special charactersxkcd=false
- Set totrue
to enable XKCD-style passwords
-
Download the compiled binary from Github releases
-
Run the API server:
$ ./password serve -h start an API server to request passwords Usage: password serve [flags] Flags: -h, --help help for serve --port int port to listen on (default 3000)
-
Request your password using
http://localhost:3000/v1/getPassword?length=20&special=true
$ curl https://passwd.fyi/v1/getPassword?length=20&special=true
0M4L-1[lT:@2&7,p,o-;
package main
import pwd "github.com/Luzifer/password/v2/lib"
func getPassword() (string, error) {
return pwd.NewSecurePassword().GeneratePassword(16, false)
}
Tests and benchmark are run by Travis CI at every push to this repository:
$ go test -bench .
goos: linux
goarch: amd64
pkg: github.com/Luzifer/password/lib
BenchmarkGeneratePasswords8Char-8 20000 65469 ns/op
BenchmarkGeneratePasswords8CharSpecial-8 20000 97659 ns/op
BenchmarkGeneratePasswords16Char-8 20000 84215 ns/op
BenchmarkGeneratePasswords16CharSpecial-8 20000 92885 ns/op
BenchmarkGeneratePasswords32Char-8 10000 152436 ns/op
BenchmarkGeneratePasswords32CharSpecial-8 10000 144352 ns/op
BenchmarkGeneratePasswords128Char-8 1000 2199011 ns/op
BenchmarkGeneratePasswords128CharSpecial-8 2000 1089225 ns/op
BenchmarkGeneratePasswords4Words-8 200000 9472 ns/op
BenchmarkGeneratePasswords20Words-8 100000 14098 ns/op
PASS
ok github.com/Luzifer/password/lib 21.624s