前言
一篇简单的OpenSSL CLI 随机数生成器使用经验,不定期更新。
获取帮助
1 | openssl rand -h |
输出如下:
1 | Usage: rand [options] num |
生成随机数
一个最基本的OpenSSL rand指令大致是这样的:
1 | openssl rand -hex 32 |
这个指令让OpenSSL生成一个32字节(256位)的随机数,并以16进制的形式进行输出。
一个输出示例是这样:
1 | 993500b078f18f45a87176f27b75a836d55a674de4981eec9c3016b7c40adb81 |
总体选项
-help 或 -h
获取帮助,例如:
1 | openssl rand -help |
或:
1 | openssl rand -h |
个人使用的OpenSSL版本是3.1.2,它的输出如下:
1 | Usage: rand [options] num |
engine
使用指定的引擎来产生随机数。
你可以首先尝试使用OpenSSL的engine指令来查一下本机支持的引擎:
1 | openssl engine -t |
如果你的机器是Intel CPU,那么一般会有RDRAND引擎,输出类似于这样:
1 | (rdrand) Intel RDRAND engine |
那么此时你可以使用Intel的RDRAND引擎作为熵源之一来生成随机数,例如:
1 | openssl rand -engine rdrand -hex 32 |
一个示例输出如下:
1 | Engine "rdrand" set. |
输出选项
-out
把生成的随机数据写入到指定的位置,例如,写入到rand.bin
文件中:
1 | openssl rand -out rand.bin 32 |
它会向rand.bin
写入32字节(256位)的随机数据。
-base64
输出以Base64进行编码,例如:
1 | openssl rand -base64 32 |
一个示例输出为:
1 | LyAhQ/wFwbvpAhibZUb1zUbQWyKQ/DNgjDO5A+cmgsI= |
-hex
输出为16进制,例如:
1 | openssl rand -hex 32 |
示例输出为:
1 | LyAhQ/wFwbvpAhibZUb1zUbQWyKQ/DNgjDO5A+cmgsI= |
随机状态选项
-rand
把指定的文件加入到随机数生成器的熵源当中,例如:
1 | openssl rand -base64 -rand rand.bin 32 |
示例输出为:
1 | VwphXVGWk+ImerchS+rlR6VCy6EFNuiqjV9NU88Ty1Y= |
-writerand
向指定文件写入随机数据,例如:
1 | openssl rand -writerand rand.bin 32 |
它会向rand.bin
写入32字节(256位)的随机数据。
参数
num
附在指令的最后,单位为字节,代表希望生成的随机数长度,例如:
1 | openssl rand 32 |
这代表生成32字节(256位)的随机数。