1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package main
- import (
- "flag"
- "fmt"
- "math"
- "os"
- "strings"
- )
- func contains(arr [3]string, str string) bool {
- for _, a := range arr {
- if a == str {
- return true
- }
- }
- return false
- }
- func main() {
- var charsets map[string]string
- var usedCharsets[] string
- var possibleSymbols int = 0
- var passphrase string
- var words int
- charsets = make(map[string]string)
- charsets["Numbers"] = "0123456789"
- charsets["Lowercase"] = "abcdefghijklmnopqrstuvwxyz"
- charsets["Uppercase"] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- charsets["Common Special Characters"] = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
- charsets["Space"] = " "
- charsets["Extended ASCII"] = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
- flag.StringVar(&passphrase, "diceware", "", "a diceware passphrase")
- flag.IntVar(&words, "words", 0, "How many words")
- flag.StringVar(&passphrase, "random", "", "a random string password")
- flag.StringVar(&passphrase, "insecure", "", "a human invented password")
- flag.Parse()
- seen := make(map[string]bool)
- flag.Visit(func(f *flag.Flag) { seen[f.Name] = true })
- if len(seen) == 0 {
- flag.PrintDefaults()
- os.Exit(2) // the same exit code flag.Parse uses
- }
- fmt.Println("\nEvaluated string:", passphrase)
- if dice := seen["diceware"]; dice {
- if dice := !seen["words"]; dice {
- os.Exit(2)
- } else {
- entropy := math.Log2(math.Pow(float64(7776), float64(words)))
- fmt.Println("\nPassphrase entropy:", entropy)
- }
- } else if rnd := seen["random"]; rnd {
- passphraseLength := len(passphrase)
- for key, value := range charsets {
- if strings.ContainsAny(passphrase, value) {
- possibleSymbols += len(value)
- usedCharsets = append(usedCharsets, key)
- }
- }
- entropy := math.Log2(math.Pow(float64(possibleSymbols), float64(passphraseLength)))
- fmt.Println("\nNumber of characters:", passphraseLength)
- fmt.Println("\nUsed character sets:", strings.Join(usedCharsets, ", "))
- fmt.Println("\nPassphrase entropy:", entropy)
- }
- }
|