mirror of
https://github.com/Luzifer/password.git
synced 2024-12-19 20:31:18 +00:00
Fast and secure password generator and library
Knut Ahlers
aa39ad3413
Squashed commit of the following: commit ef74c84e5b4826c2c58012cd4b0ea975d1dd7260 Author: Knut Ahlers <knut@ahlers.me> Date: Sun Dec 1 13:09:53 2019 +0100 Minor cleamup Signed-off-by: Knut Ahlers <knut@ahlers.me> commit 0b57aa8c8abb2fd118c71fdfd8d51cb707861821 Author: Knut Ahlers <knut@ahlers.me> Date: Sun Dec 1 13:09:17 2019 +0100 [#6] Add optional separator to XKCD passwords Signed-off-by: Knut Ahlers <knut@ahlers.me> Signed-off-by: Knut Ahlers <knut@ahlers.me> |
||
---|---|---|
cmd/password | ||
frontend | ||
hasher | ||
js | ||
lib | ||
.gitignore | ||
.gitmodules | ||
.repo-runner.yaml | ||
.travis.yml | ||
Dockerfile | ||
generateXKCDWordList.sh | ||
go.mod | ||
History.md | ||
LICENSE | ||
Makefile | ||
README.md |
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 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
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