【Go每日一练】随机密码生成器

👻创作者:丶重明
👻创作时间:2025年3月17日
👻擅长领域:运维

目录

1.😶‍🌫️题目:随机密码生成器

编写一个Go语言程序,生成一个随机密码。该密码需要包含字母(大写、小写)和数字,并确保密码的长度由用户自己决定,但是不能低于8位。

开发要求:

  • 生成的密码应该包含小写字母、大写字母和数字。
  • 密码的长度由用户输入。
  • 如果输入的长度小于 8,则提示用户重新输入。

2.😶‍🌫️密码生成可用资源

go 复制代码
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
!@#$%^&*()_+-=[]{};':\",./<>?

3.😶‍🌫️代码开发

go 复制代码
package main

import (
	"crypto/rand"
	"fmt"
	"math/big"
	"strings"
)

const (
	lowercase = "abcdefghijklmnopqrstuvwxyz"
	uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	digits    = "0123456789"
	specials  = "!@#$%^&*()_+-=[]{};':\",./<>?"
)

func generatePassword(length int) string {
	if length < 8 {
		fmt.Println("密码的长度不能低于8位噢.")
		return ""
	}
	
	charSet := lowercase + uppercase + digits + specials
	var password strings.Builder

	for i := 0; i < length; i++ {
		index, _ := rand.Int(rand.Reader, big.NewInt(int64(len(charSet))))
		password.WriteByte(charSet[index.Int64()])
	}

	return password.String()
}
func main() {
	var length int
	fmt.Println("请输入密码的长度:")
	fmt.Scanln(&length)

	password := generatePassword(length)
	fmt.Println("生成的密码为:", password)
}

4.😶‍🌫️代码输出

保存代码文件,执行go run运行代码

go 复制代码
> go run .\11.gotest.go
请输入密码的长度:
11
生成的密码为: QL"nOg=akp.

> go run .\11.gotest.go
请输入密码的长度:
16
生成的密码为: QaJJUbnw9=]v"S:<

> go run .\11.gotest.go
请输入密码的长度:
7
密码的长度不能低于8位噢.
生成的密码为: 

5.😶‍🌫️代码解析

1. 字符集:

我们定义了四个常量(const),分别为大写字母、小写字母、数字和特殊符号。

使用字符串拼接的方法将四个常量加在一起然后赋值给变量charSet

2. 生成密码:

使用rand.Int(rand.Reader, big.NewInt(int64(len(charSet))))从字符集charSet 中随机选择一个字符,并将其添加到密码字符串中。

rand intcrypto/rand 包中的一个函数,用于生成一个随机的 *big.Int 类型的整数.

rand.Reader是一个全局变量,是一个密码学安全的随机数生成器,通常用于生成高质量的随机数。

big.NewInt math/big 包中的一个函数,用于创建一个 *big.Int 类型的整数.

len(charSet) 返回字符集 charSet 的长度(字符的数量)

int64(len(charSet)) 将长度转换为 int64类型,因为 big.NewInt 需要一个 int64 类型的参数。

3. 用户输入长度:

程序首先要求用户输入密码的长度,如果输入的长度小于 8,程序会提示用户不合规范。

4.输出密码:

在用户输入合适的密码长度后,程序生成并输出随机密码。

6.😶‍🌫️本文知识点

6.1.😶‍🌫️math/big

math/big 是 Go 语言标准库中的一个包,用于处理大整数(big.Int)、大浮点数(big.Float)和有理数(big.Rat)。

它的主要作用是解决标准数据类型(如 int、int64、float64 等)无法处理的大数计算问题。

核心类型:

  • big.Int:用于表示任意精度的整数,支持运算
  • big.Float:用于表示任意精度的浮点数,支持运算
  • big.Rat:用于表示有理数(分数)

6.2.😶‍🌫️strings

strings 是 Go 语言标准库中的一个包,专门用于处理字符串操作。

它提供了丰富的函数,用于字符串的查找、替换、分割、连接、修剪、比较等常见操作。

本文用到了strings.Builder类型,它通过内部的字节缓冲区来避免频繁的内存分配,适合需要频繁拼接字符串的场景。

同系列:

上一篇:【Go每日一练】猜数字游戏

相关推荐
码农的天塌了3 分钟前
JVM(Java虚拟机)的核心组成
java·jvm·java虚拟机
Y第五个季节14 分钟前
Maven 简单了解
java·开发语言·maven
冴羽17 分钟前
SvelteKit 最新中文文档教程(7)—— 构建和部署
前端·javascript·svelte
网络研究院33 分钟前
Oracle 公布 Java 的五大新功能
java·oracle·编程·更新·功能
丁一郎学编程1 小时前
数据结构知识点1
java·数据结构·算法
浪裡遊1 小时前
uniapp常用组件
开发语言·前端·uni-app
五点六六六1 小时前
Restful API 前端接口模型架构浅析
前端·javascript·设计模式
筱筱°1 小时前
Vue 路由守卫
前端·javascript·vue.js
牛马baby1 小时前
Java高频面试之集合-15
java·开发语言·面试
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS智慧生活商城系统(JAVA毕业设计)
java·vue.js·spring boot