zoukankan      html  css  js  c++  java
  • 密码生成器

    package main
    
     import (
         "flag"
        "fmt"
        "math/rand"
        "time"
     )
    
     var (
         length int
         charset string
    )
    
    const (
        NUmStr = "0123456789"
        ChanStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
        SpecStr = "+=-@#~,.[]()!%^*$"
    )
    
    // 解析参数
    func parseArgs() {
        flag.IntVar(&length,"l",16,"-l 生成密码长度")
        flag.StringVar(&charset,"t","num",
            // 反引号以原样输出
            `-t 制定密码生成的字符集,
            num: 只使用数字,
            char: 只使用英文字母,
            mix: 使用数字和字母,
            advance: 使用数字、字母以及特殊字符`)
        flag.Parse()
    }
    
    // 检测字符串中的空格
    func test1() {
        for i := 0; i < len(ChanStr); i++ {
            if ChanStr[i] != ' ' {
                fmt.Printf("%c",ChanStr[i])
            }
        }
    }
    
    func generatePasswd() string {
        // 初始化密码切片
        var passwd []byte = make([]byte,length,length)
        // 源字符
        var sourceStr string
        // 判断字符类型,如果是数字 
        if charset == "num" {
           sourceStr = NUmStr 
           // 如果选的是混合模式
        } else if charset == "char" {
            sourceStr = fmt.Sprintf("%s",ChanStr)
        } else if charset == "mix" {
            sourceStr = fmt.Sprintf("%s%s",NUmStr,ChanStr)
            // 如果选的是高级模式
        } else if charset == "advance" {
            sourceStr = fmt.Sprintf("%s%s%s", NUmStr, ChanStr,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)
    }
    
  • 相关阅读:
    关于缓存雪崩穿透击穿等一些问题
    MethodHandler笔记
    并发总结(博客转载)
    负载均衡的几种算法Java实现代码
    SpringJdbc插入对象返回主键的值
    【Java基础】01-推荐参考材料
    【Java基础】注解
    【JSON】
    【Kafka】3-配置文件说明
    【Kafka】1-理论知识
  • 原文地址:https://www.cnblogs.com/Csir/p/9326922.html
Copyright © 2011-2022 走看看