前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang实现一个密码生成器

Golang实现一个密码生成器

作者头像
超蛋lhy
发布2018-08-31 11:50:35
2.3K0
发布2018-08-31 11:50:35
举报
文章被收录于专栏:PythonistaPythonista

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

代码语言:javascript
复制
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\n", length, charset)
    //test1()
    passwd := generatePasswd()
    fmt.Println(passwd)
    fmt.Printf("length:%d charset:%s\n", length, charset)
}

效果呢?

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档