项目背景
在现代软件系统中,'密码(Password)'依然是最基础、最常见的身份认证手段之一。
无论是:
- Web 系统登录
- 数据库访问凭证
- API Key
- 运维账号
- 内部管理系统
几乎都绕不开一个核心问题:
如何生成一个'足够安全'的密码?
现实中,弱密码问题长期存在:
- 使用生日、手机号
- 使用
123456、password - 使用单一字符集(纯数字 / 纯小写)
- 密码长度过短
这些问题直接导致:
- 暴力破解成功率极高
- 字典攻击几乎零成本
- 内部系统被轻易入侵
因此,'复杂密码生成器(Password Generator)'成为了安全体系中的一个基础组件。
通过算法自动生成:
- 长度足够
- 字符类型丰富
- 分布均匀
- 不可预测
的密码,是提升系统整体安全性的第一道防线。
需求分析
本项目的目标是:
使用 Go 语言实现一个可配置的复杂密码生成器算法(Password Generator)。
1. 功能需求
密码生成器应支持:
- 指定密码长度
- 支持以下字符类型:
- 小写字母
a-z - 大写字母
A-Z - 数字
0-9 - 特殊字符(如
!@#$%^&*)
- 小写字母
- 至少包含一种启用的字符类型
- 随机性足够强
2. 安全性需求
- 使用 安全随机数生成器
- 不允许使用伪随机算法(如
math/rand) - 每次生成结果不可预测
3. 工程要求
- 使用 Go 标准库
- 参数清晰、易于扩展
- 代码注释完整
- 可作为独立工具或库使用
4. 教学要求
- 清楚区分'随机性'和'安全随机性'
- 解释字符池构建过程
- 解释每一步的安全意义
相关技术
1. 随机数的两种来源
在 Go 中,随机数主要有两种来源:
math/rand
- 速度快
- 可预测
- 不适合安全场景
crypto/rand
- 基于系统安全熵源
- 不可预测
- 适合密码、Token、Key 生成

