Compare commits
18 Commits
v1.1
...
e1ced3f76d
| Author | SHA1 | Date | |
|---|---|---|---|
| e1ced3f76d | |||
| cdbca3b074 | |||
| e4eca321f6 | |||
| 0eacc92a45 | |||
| e96fded8ff | |||
| 710f96e9e7 | |||
| 4609be7a9d | |||
| 57b78dc62e | |||
| 87fa1107d7 | |||
| 3915761477 | |||
| 5ba592db21 | |||
| b81783b470 | |||
| cebcbc2823 | |||
| b5b7c208f2 | |||
| 8aa2f61b3c | |||
| f2a9cdd216 | |||
| c99539c0a9 | |||
| 33cf6cde39 |
@@ -1,9 +1,36 @@
|
||||
# GoPass
|
||||
An easy to use command-line password generator that creates secure passwords (Version 1.1 adds proper cryptographic seeding of math/rand)
|
||||
|
||||
An easy to use command-line password generator that creates secure passwords (Version 1.1 adds proper cryptographic
|
||||
seeding of math/rand)
|
||||
|
||||
# Usage:
|
||||
<code>./gopass [number of characters]</code><br>
|
||||
|
||||
`./gopass [number of characters]`<br>
|
||||
or <br>
|
||||
`./gopass [number of characters] "[excluded characters]"`
|
||||
|
||||
<hr>
|
||||
eg:
|
||||
<code>./gopass 32</code><br>
|
||||
output: <code>E$bGOiiPASS*,ISl{!MJ&<\[COOL0eVw</code>
|
||||
|
||||
eg: `./gopass 32` <br>
|
||||
output: `E$bGOiiPASS*,ISl{!MJ&<\[COOL0eVw` <br>
|
||||
eg (with excluded characters): `./gopass 32 "$,!"` <br>
|
||||
output: `EYbGOiiPASS*2ISl{?MJ&<\[COOL0eVw` <- note the excluded characters are not present in the output
|
||||
|
||||
# How to install/use for Windows:
|
||||
|
||||
1. Download Windows binary, it may be helpful to simply rename it to "gopass.exe" (make sure to add .exe, this won't
|
||||
need to
|
||||
be typed to execute the file from the CLI, but it is required for Windows to recognize the binary) to keep
|
||||
commands shorter.
|
||||
2. Move the file to your `C:\Users\[Username]` directory
|
||||
3. Opening the console *without* Administrator privileges will put you in the directory mentioned above by default
|
||||
4. Now type `gopass [number of characters]` (Ex. `gopass 64`) to generate a new password!
|
||||
|
||||
# How to install/use for Linux:
|
||||
|
||||
1. Download Linux binary, it may be helpful to simply rename it to "gopass" to keep commands shorter.
|
||||
2. Move the file to your home directory.
|
||||
3. `chmod +x gopass` if necessary
|
||||
3. Opening your terminal should put you in your home directory by default, if not, just type `cd` to get sent back to
|
||||
home.
|
||||
4. Now type `./gopass [number of characters]` (Ex. `./gopass 64`) to generate a new password!
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,27 +1,49 @@
|
||||
// GoPass
|
||||
// Author: Maximilian Patterson
|
||||
// Version: 1.1
|
||||
// Version: 1.2.2
|
||||
package main
|
||||
|
||||
import (
|
||||
cryptorand "crypto/rand"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"math/big"
|
||||
mathrand "math/rand"
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var runes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+[]\\{}|;':,./<>?")
|
||||
var allowedCharacters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890`~!@#$%^&*()_+[]\\{}|;':,./<>?")
|
||||
|
||||
func main() {
|
||||
// Take OS arg (only accepts one arg)
|
||||
arg := os.Args[1]
|
||||
// Take in all OS arg
|
||||
args := os.Args[1:]
|
||||
if len(args) < 1 {
|
||||
println("No password length specified! (ex: ./gopass 16)")
|
||||
return
|
||||
}
|
||||
|
||||
// Convert String arg to int
|
||||
size, err := strconv.Atoi(arg)
|
||||
size, err := strconv.Atoi(args[0])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
println("First argument supplied must be an integer! (ex: 16)")
|
||||
return
|
||||
}
|
||||
|
||||
// Grab second argument (if it exists) and use it as a disallowed character(s)
|
||||
var disallowed []rune
|
||||
if len(args) == 2 {
|
||||
// Break apart the string into a slice of runes
|
||||
disallowed = []rune(args[1])
|
||||
|
||||
// Remove all disallowed characters from the allowedCharacters slice
|
||||
for _, r := range disallowed {
|
||||
for i, v := range allowedCharacters {
|
||||
if v == r {
|
||||
allowedCharacters = append(allowedCharacters[:i], allowedCharacters[i+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Make empty array of runes with size of size
|
||||
@@ -31,15 +53,22 @@ func main() {
|
||||
var b [8]byte
|
||||
_, err = cryptorand.Read(b[:])
|
||||
if err != nil {
|
||||
panic("Error securely seeding rand!")
|
||||
println("Error securely seeding crypto/rand!")
|
||||
return
|
||||
}
|
||||
mathrand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
|
||||
|
||||
// Assign every slot of pass to a random rune (generate rand int of length runes to select)
|
||||
// Assign every slot of pass to a random allowedCharacter
|
||||
for i := range pass {
|
||||
pass[i] = runes[mathrand.Intn(len(runes))]
|
||||
// Generate a random int greater than 0 and not to exceed the length of allowedCharacters
|
||||
index, err := cryptorand.Int(cryptorand.Reader, big.NewInt(int64(len(allowedCharacters))))
|
||||
if err != nil {
|
||||
println("Error securely generating random character!")
|
||||
return
|
||||
}
|
||||
pass[i] = allowedCharacters[index.Int64()]
|
||||
}
|
||||
|
||||
// Print the pass :D
|
||||
// Print the password
|
||||
fmt.Println(string(pass))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
# The current version number of the program
|
||||
VERSION := 1.2.2
|
||||
|
||||
# List of OS and architecture combinations to build
|
||||
BUILD_OS_ARCH := \
|
||||
darwin/amd64 \
|
||||
linux/386 \
|
||||
linux/amd64 \
|
||||
windows/386 \
|
||||
windows/amd64
|
||||
|
||||
# Build all targets
|
||||
all: $(BUILD_OS_ARCH)
|
||||
|
||||
# Build targets in the form of `OS/ARCH`
|
||||
darwin/amd64:
|
||||
GOOS=darwin \
|
||||
GOARCH=amd64 \
|
||||
go build -ldflags="-s -w" -o "gopass-darwin-amd64-$(VERSION)" main.go
|
||||
|
||||
linux/386:
|
||||
GOOS=linux \
|
||||
GOARCH=386 \
|
||||
go build -ldflags="-s -w" -o "gopass-linux-386-$(VERSION)" main.go
|
||||
|
||||
linux/amd64:
|
||||
GOOS=linux \
|
||||
GOARCH=amd64 \
|
||||
go build -ldflags="-s -w" -o "gopass-linux-amd64-$(VERSION)" main.go
|
||||
|
||||
windows/386:
|
||||
GOOS=windows \
|
||||
GOARCH=386 \
|
||||
go build -ldflags="-s -w" -o "gopass-windows-386-$(VERSION)" main.go
|
||||
|
||||
windows/amd64:
|
||||
GOOS=windows \
|
||||
GOARCH=amd64 \
|
||||
go build -ldflags="-s -w" -o "gopass-windows-amd64-$(VERSION)" main.go
|
||||
Reference in New Issue
Block a user