app.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "fmt"
  4. "math"
  5. "os"
  6. "strings"
  7. )
  8. func contains(arr [3]string, str string) bool {
  9. for _, a := range arr {
  10. if a == str {
  11. return true
  12. }
  13. }
  14. return false
  15. }
  16. func main() {
  17. var charsets map[string]string
  18. var usedCharsets[] string
  19. var possibleSymbols int = 0
  20. if len(os.Args) == 1 {
  21. fmt.Println("Usage:\n\tpassphrase-entropy passphrase\n\nNo passphrase given.")
  22. os.Exit(0)
  23. }
  24. passphrase := strings.Join(os.Args[1:]," ")
  25. passphraseLength := len(passphrase)
  26. fmt.Println("\nEvaluated string:", passphrase)
  27. charsets = make(map[string]string)
  28. charsets["Numbers"] = "0123456789"
  29. charsets["Lowercase"] = "abcdefghijklmnopqrstuvwxyz"
  30. charsets["Uppercase"] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  31. charsets["Common Special Characters"] = " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~‚"
  32. charsets["Extended ASCII"] = "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
  33. for key, value := range charsets {
  34. if strings.ContainsAny(passphrase, value) {
  35. possibleSymbols += len(value)
  36. usedCharsets = append(usedCharsets, key)
  37. }
  38. }
  39. entropy := math.Log2(math.Pow(float64(possibleSymbols), float64(passphraseLength)))
  40. fmt.Println("\nNumber of characters:", passphraseLength)
  41. fmt.Println("\nUsed character sets:", strings.Join(usedCharsets, ", "))
  42. fmt.Println("\nPassphrase entropy:", entropy)
  43. }