Luzifer / password
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
Usage
Via Web
My service Secure Password is powered by this app and will provide you with secure passwords.
Via CLI
-
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
Via API
/v1/getPassword
- Retrieve a password from the API
date=true
- Set to false
no to prepend the date to XKCD-style passwords
length=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 to true
to enable special characters
xkcd=false
- Set to true
to enable XKCD-style passwords
Self-Hosted
-
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
Hosted
$ curl https://passwd.fyi/v1/getPassword?length=20&special=true
0M4L-1[lT:@2&7,p,o-;
As library in your own code
package main
import pwd "github.com/Luzifer/password/v2/lib"
func getPassword() (string, error) {
return pwd.NewSecurePassword().GeneratePassword(16, false)
}
Benchmark / Test
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