|
@@ -0,0 +1,54 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "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
|
|
|
|
+
|
|
|
|
+ if len(os.Args) == 1 {
|
|
|
|
+ fmt.Println("Usage:\n\tpassphrase-entropy passphrase\n\nNo passphrase given.")
|
|
|
|
+ os.Exit(0)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ passphrase := strings.Join(os.Args[1:]," ")
|
|
|
|
+ passphraseLength := len(passphrase)
|
|
|
|
+
|
|
|
|
+ fmt.Println("\nEvaluated string:", passphrase)
|
|
|
|
+
|
|
|
|
+ charsets = make(map[string]string)
|
|
|
|
+ charsets["Numbers"] = "0123456789"
|
|
|
|
+ charsets["Lowercase"] = "abcdefghijklmnopqrstuvwxyz"
|
|
|
|
+ charsets["Uppercase"] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
|
|
+ charsets["Common Special Characters"] = " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~‚"
|
|
|
|
+ charsets["Extended ASCII"] = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
|
|
|
|
+
|
|
|
|
+ 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)
|
|
|
|
+}
|