在 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方法接受一个参数并返回一个由随机字节组成的加密安全字节
串。size
size
该方法的实现方式取决于底层操作系统。
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.
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.
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.