在 Python 中生成长度为 N 的随机字节

在 Python 中生成长度为 N 的随机字节

Generate random bytes of length N in Python

使用该os.urandom()方法生成长度为 N 的随机字节,例如
random_bytes = os.urandom(8). os.urandom()方法返回一个适合加密使用的 N 个随机字节的字节串。

主程序
import os # ✅ create random bytestring that is 8 bytes long random_bytes = os.urandom(8) print(random_bytes) # 👉️ b'\xd8\xa7\\\xe4~\xa2y\xe3' print(len(random_bytes)) # 👉️ 8 # ------------------------------------------ # ✅ create random bytestring that is 16 bytes long random_bytes = os.urandom(16) # 👇️ b'\xeb\xba^\x81\xe1\x00\xb9\x0c\x99\x1e\xe9\x86\x86\x0bl]' print(random_bytes) print(len(random_bytes)) # 👉️ 16 # ------------------------------------------ # ✅ create random bytearray random_bytearray = bytearray(os.urandom(16)) # 👇️ bytearray(b'\xe8\x87p\x11Y\xfd~\xff\xe6\xe1O\xbf\x06\xd8Om') print(random_bytearray)

os.urandom方法接受一个参数并返回一个由随机字节组成的加密安全字节
串。sizesize

该方法的实现方式取决于底层操作系统。

如果需要生成随机字节数组,将调用结果传递类。 os.urandom()bytearray
主程序
import os random_bytearray = bytearray(os.urandom(16)) # 👇️ bytearray(b'\xe8\x87p\x11Y\xfd~\xff\xe6\xe1O\xbf\x06\xd8Om') print(random_bytearray)

bytearray类通过缓冲协议复制提供的二进制数据

或者,您可以使用该secrets模块。

如果您使用的 Python 版本高于 3.9,则可以使用较新的
random.randbytes()方法。

使用 random.randbytes() 生成长度为 N 的随机字节

使用该random.randbytes()方法生成长度为 N 的随机字节,例如
random_bytes = random.randbytes(8). randbytes()方法生成 n 个随机字节。

主程序
import random random_bytes = random.randbytes(8) print(random_bytes) # 👉️ b'\xb0\x1c\x01:L\x95 \xa3' print(len(random_bytes)) # 👉️ 8 # ------------------------------------------ random_bytes = random.randbytes(16) # 👇️ b'M\x9dh\xfa\xee\x93i\x02\x17\xe2\x13\xa5\x03\xebh\xc8' print(random_bytes) print(len(random_bytes)) # 👉️ 16

random.randbytes方法是在 Python 3.9 中引入的

,它生成 N 个随机字节。

该方法不应用于生成安全令牌。

secrets如果需要生成安全令牌,可以使用该模块。

使用 secrets.token_bytes() 生成长度为 N 的随机字节

Use the secrets.token_bytes() method to generate random bytes of length N,
e.g. random_bytes = secrets.token_bytes(8). The token_bytes() method from
the secrets module generates a cryptographically strong random byte string of
N bytes.

main.py
import secrets random_bytes = secrets.token_bytes(8) print(random_bytes) # 👉️ b'>C\xe3\xe3?m\xa4u' print(len(random_bytes)) # 👉️ 8 # ------------------------------------------ random_bytes = secrets.token_bytes(16) # 👇️ b'\x84\x84>\xe0]o\xda\x1e\xc8qL\xde\xf0\x8e\xc7\xec' print(random_bytes) print(len(random_bytes)) # 👉️ 16

The secrets
module is used for generating cryptographically strong random numbers for
passwords, security tokens, etc.

The
secrets.token_bytes
method returns a random byte string of the given length.

If the number of bytes is not specified or is None, a default value is used.

main.py
import secrets random_bytes = secrets.token_bytes() # 👇️ b'\xcc\xed\xf2\xd6Q\x9e\x02\x02\x1d\xbe\xddu\xf9\x11\xd5\x015\xccT\xf4\xe4)/S\xd9N\xed\x0b\xb0;Xt' print(random_bytes) print(len(random_bytes)) # 👉️ 32

Which approach you pick is a matter of personal preference.

If you need to generate security tokens, make sure to not use the
random.randbytes() method.