package main import ( "fmt" "math/rand" "strings" "time" "github.com/nbutton23/zxcvbn-go" ) var alpha = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"} var whitespace = []string{".", "!", "+", "-", "_", "*"} var numbers = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "C", "X", "V", "F", "Q", "Z", "N"} var left = []string{"Alabama", "Alaska", "Arizona", "Maryland", "Nevada", "Mexico", "Texas", "Utah", "Glasgow", "Inverness", "Edinburgh", "Dumbarton", "Balloch", "Renton", "Cardross", "Dundee", "Paisley", "Hamilton", "Greenock", "Falkirk", "Irvine", "Renfrew", "Erskine", "London", "Hammersmith", "Islington", "Silver", "Black", "Yellow", "Purple", "White", "Pink", "Red", "Orange", "Brown", "Green", "Blue", "Amber", "Aqua", "Azure", "Bronze", "Coral", "Copper", "Crimson", "Cyan", "Ginger", "Gold", "Indigo", "Jade", "Ruby", "Cedar", "Cream", "Peach", "Sepcia", "Mercyful", "Cyber", "Ultra", "Hunter", "Electric", "Steel", "Fire", "Smoke", "Thunder", "Pewter", "Stone", "Iron", "Shadow", "Grey", "Mocha", "Wood", "Space", "Manic", "Grunt", "X-Ray", "Sabbra", "Atomic", "Swordfish", "Dance", "Tank", "Lazy", "Glorious", "Abstract", "Abyssal", "Airborne", "Ancestral", "Blazing", "Bright", "Burning", "Colourless", "Crystal", "Deadly", "Exhausted", "Favourite", "Final", "Floating", "Flying", "Frozen", "Geometric", "Gravity", "Halcyon", "Hyper", "Infinite", "Inspiring", "Limitless", "Lucent", "Luminous", "Magnificent", "Parallax", "Prime", "Radiant", "Raging", "Rebuilt", "Reckless", "Relentless", "Ruthless", "Second", "Serene", "Shimmering", "Soaring", "Speedy", "Stellar", "Swift", "Timeless", "Towering", "Tranquil", "Ultimate", "Visionary", "Whispering", "Winged", "Cosmic", "Critical", "Dark"} var right = []string{"Aganju", "Cygni", "Akeron", "Antares", "Aragoth", "Ardus", "Carpenter", "Cooper", "Dahin", "Capella", "Endriago", "Gallina", "Fenris", "Freya", "Glenn", "Grissom", "Jotunheim", "Lagarto", "Primus", "Vega", "Ragnarok", "Shepard", "Slayton", "Tarsis", "Mercury", "Venus", "Mars", "Earth", "Terra", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto", "Europa", "Ganymede", "Callisto", "Titan", "Juno", "Eridanus", "Scorpius", "Crux", "Cancer", "Taurus", "Lyra", "Andromeda", "Virgo", "Aquarius", "Cygnus", "Corvus", "Taurus", "Draco", "Perseus", "Pegasus", "Gemini", "Columbia", "Bootes", "Orion", "Deneb", "Merope", "Agate", "Amber", "Beryl", "Calcite", "Citrine", "Coral", "Diamond", "Emerald", "Garnet", "Jade", "Lapis", "Moonstone", "Obsidian", "Onyx", "Opal", "Pearl", "Quartz", "Ruby", "Sapphire", "Topaz", "Iron", "Lead", "Nickel", "Copper", "Zinc", "Tin", "Manes", "Argon", "Neon", "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliett", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whisky", "Xray", "Yankee", "Zulu", "Fate", "Miner", "Blaster", "Click", "Noise", "Cadabra", "Shotgun", "Swordfish", "Dancer", "Dragon", "Lotus", "Storm", "Songbird", "Purpose", "Aegis", "Anvil", "Ashes", "Bard", "Breath", "Claws", "Departure", "Eagle", "Falcon", "Focus", "Forge", "Hammer", "Hand", "Hawk", "Marvel", "Master", "Mirror", "Nemesis", "Omen", "Pillar", "Pride", "Prophecy", "Reflection", "Shield", "Skylark", "Spear", "Sword", "Talon", "Triumph", "Victory", "Vision", "Asimov"} /** Return a single random value from a slice */ func randomVal(slice []string) string { rand.Seed(time.Now().UnixNano()) m := len(slice) mn := 0; v := rand.Intn(m-mn) + mn outval := slice[v] return outval } /** Generate a string of count entries from a slice */ func numberCluster(count int, slice []string) string { builder := []string{} for i:= 0; i < count; i++ { builder = append(builder, randomVal(slice)) } output := strings.Join(builder, "") return output } func main() { ws := randomVal(whitespace) long := []string{} short := []string{} long = append(long, randomVal(left)) long = append(long, randomVal(right)) long = append(long, numberCluster(3, numbers)) short = append(short, numberCluster(8, alpha)) longOutput := strings.Join(long, ws) shortOutput := strings.Join(short, ws) fmt.Printf("Long Password: %s\n\n", longOutput) passwordStenght := zxcvbn.PasswordStrength(longOutput, nil) fmt.Printf("Password score (0-4): %d\nEstimated entropy (bit): %f\nEstimated time to crack: %s\n\n", passwordStenght.Score, passwordStenght.Entropy, passwordStenght.CrackTimeDisplay, ) fmt.Printf("Short Password: %s\n\n", shortOutput) passwordStenght = zxcvbn.PasswordStrength(shortOutput, nil) fmt.Printf("Password score (0-4): %d\nEstimated entropy (bit): %f\nEstimated time to crack: %s\n\n", passwordStenght.Score, passwordStenght.Entropy, passwordStenght.CrackTimeDisplay, ) }