OpenSSL CLI 随机数生成器 个人使用经验

前言

一篇简单的OpenSSL CLI 随机数生成器使用经验,不定期更新。


获取帮助

1
openssl rand -h

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Usage: rand [options] num

General options:
-help Display this summary
-engine val Use engine, possibly a hardware device

Output options:
-out outfile Output file
-base64 Base64 encode output
-hex Hex encode output

Random state options:
-rand val Load the given file(s) into the random number generator
-writerand outfile Write random data to the specified file

Provider options:
-provider-path val Provider load path (must be before 'provider' argument if required)
-provider val Provider to load (can be specified multiple times)
-propquery val Property query used when fetching algorithms

Parameters:
num Number of bytes to generate

生成随机数

一个最基本的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Usage: rand [options] num

General options:
-help Display this summary
-engine val Use engine, possibly a hardware device

Output options:
-out outfile Output file
-base64 Base64 encode output
-hex Hex encode output

Random state options:
-rand val Load the given file(s) into the random number generator
-writerand outfile Write random data to the specified file

Provider options:
-provider-path val Provider load path (must be before 'provider' argument if required)
-provider val Provider to load (can be specified multiple times)
-propquery val Property query used when fetching algorithms

Parameters:
num Number of bytes to generate

engine

使用指定的引擎来产生随机数。

你可以首先尝试使用OpenSSL的engine指令来查一下本机支持的引擎:

1
openssl engine -t

如果你的机器是Intel CPU,那么一般会有RDRAND引擎,输出类似于这样:

1
2
3
4
(rdrand) Intel RDRAND engine
[ available ]
(dynamic) Dynamic engine loading support
[ unavailable ]

那么此时你可以使用Intel的RDRAND引擎作为熵源之一来生成随机数,例如:

1
openssl rand -engine rdrand -hex 32

一个示例输出如下:

1
2
Engine "rdrand" set.
7ad8327169d40997c58d350f7e03d6805b2de240303ab5501fe7081719e8e150

输出选项


-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位)的随机数。


如果你觉得文章写得还不错,可以赏作者一杯咖啡喝,或者一顿饭吃。感谢支持!THYzrcoMQf7d7wzGu1PvDraTef87abSv9V