zoukankan      html  css  js  c++  java
  • Golang实现一个密码生成器

    小地鼠防止有人偷他的果实,在家里上了一把锁。这个锁怎么来的呢?请往下看。。

    package main
    
    import (
        "flag"
        "fmt"
        "math/rand"
        "time"
    )
    
    var (
        length  int
        charset string
    )
    
    const (
        NUmStr  = "0123456789"
        CharStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
        SpecStr = "+=-@#~,.[]()!%^*$"
    )
    
    //解析参数
    func parseArgs() {
        //需要接受指针,就传递地址,&
        flag.IntVar(&length, "l", 16, "-l 生成密码的长度")
        flag.StringVar(&charset, "t", "num",
            //反引号以原样输出
            `-t 制定密码生成的字符集,
            num:只使用数字[0-9],
            char:只使用英文字母[a-zA-Z],
            mix:使用数字和字母,
            advance:使用数字、字母以及特殊字符`)
        flag.Parse()
    }
    
    //检测字符串中的空格
    func test1() {
        for i := 0; i < len(CharStr); i++ {
            if CharStr[i] != ' ' {
                fmt.Printf("%c", CharStr[i])
            }
        }
    }
    
    func generatePasswd() string {
        //初始化密码切片
        var passwd []byte = make([]byte, length, length)
        //源字符串
        var sourceStr string
        //判断字符类型,如果是数字
        if charset == "num" {
            sourceStr = NUmStr
            //如果选的是字符
        } else if charset == "char" {
            sourceStr = charset
            //如果选的是混合模式
        } else if charset == "mix" {
            sourceStr = fmt.Sprintf("%s%s", NUmStr, CharStr)
            //如果选的是高级模式
        } else if charset == "advance" {
            sourceStr = fmt.Sprintf("%s%s%s", NUmStr, CharStr, SpecStr)
        } else {
            sourceStr = NUmStr
        }
        fmt.Println("source:", sourceStr)
    
        //遍历,生成一个随机index索引,
        for i := 0; i < length; i++ {
            index := rand.Intn(len(sourceStr))
            passwd[i] = sourceStr[index]
        }
        return string(passwd)
    }
    
    func main() {
        //随机种子
        rand.Seed(time.Now().UnixNano())
        parseArgs()
        fmt.Printf("length:%d charset:%s
    ", length, charset)
        //test1()
        passwd := generatePasswd()
        fmt.Println(passwd)
        fmt.Printf("length:%d charset:%s
    ", length, charset)
    }

    效果呢?

  • 相关阅读:
    C# 关于调用微信接口的代码
    Winform实现微信功能
    Delphi 7 在IDE菜单中增加UPX工具
    Delphi7中Unicode,ANSI,UTF编码问题
    本机时间不正确带来的问题
    Delphi最简化异步选择TCP服务器
    C# Winform小程序:局域网设置NTP服务器、实现时间同步
    开源Inno Setup官网下载、安装、打包教程(官网安装向导中文语言包)
    css 雪碧图的制作
    原生js 实现的瀑布流
  • 原文地址:https://www.cnblogs.com/pyyu/p/8664255.html
Copyright © 2011-2022 走看看