rand 生成随机数据
该命令基于系统密码学随机源输出随机字节,常用于生成密钥材料、初始向量、盐值与会话票据密钥,输出可以是原始字节、十六进制或 Base64 编码。要点有两个:长度必须按目标算法要求取值,例如会话票据密钥需要固定 48 字节;生成后要核对实际字节数,长度不对会导致后续工具拒绝加载。
基本信息
| 十六进制输出 | 指定字节数,输出为其两倍的字符数 |
|---|---|
| Base64 输出 | 按输入字节数编码,带填充 |
| 写文件 | 直接把随机字节写入文件 |
| 用途 | 票据密钥、盐值、测试用初始向量与令牌 |
典型使用场景
- 生成会话票据密钥:按固定长度要求输出到文件
- 生成加盐散列所需的盐值
- 生成测试用初始向量与随机标识
- 自动化脚本中生成一次性密钥
- 核对长度:确认生成结果符合算法要求
生成与校验长度
生成与校验长度
openssl rand -hex 16 # 32 个十六进制字符
openssl rand -out ticket.key 48 && stat -c %s ticket.key # 生成 48 字节并核对长度
openssl rand -base64 32 | head -1 # Base64 输出
openssl rand -base64 24 | base64 -d | wc -c # 解码后核对字节数输出方式
| 方式 | 参数 | 适用 |
|---|---|---|
| 原始字节 | 写文件 | 密钥材料、二进制使用 |
| 十六进制 | 按字节数指定 | 配置文件与日志中展示 |
| Base64 | 按字节数指定 | 文本协议与结构化配置 |
密钥材料长度按目标算法的要求取值,不要随意更改:很多工具在长度不符时直接拒绝加载,而报错信息往往不会明确指出是长度问题。
落地建议
- 生成后立即核对字节数
- 把密钥写入受控目录并设定权限
- 不要在日志中打印密钥内容
- 把生成命令固化到脚本,避免临时手输参数
用时间戳、短字符串或可预测序列代替随机源生成密钥材料,会让密钥可被推算;任何自制的伪随机方案都不应出现在密钥生成路径上。