python中的随机字节字符串

zac*_*ack 27 python string random hex

我有buf ="\ x00\xFF\xFF\xFF\xFF\x00"

我怎么能得到"\ xFF\xFF\xFF\xFF"随机化

Joh*_*ooy 49

>>> import os
>>> "\x00"+os.urandom(4)+"\x00"
'\x00!\xc0zK\x00'
Run Code Online (Sandbox Code Playgroud)

  • @zack,除了更有效率之外,randint还会返回**伪随机**数字.urandom返回适合**加密用途的随机字节** (14认同)
  • 我只是检查python doc ..与'.inin(chr(random.randint(0,255))不同,为_在范围(4)中 (3认同)
  • @NullUserException,请参阅“urandom”[此处](https://docs.python.org/2/library/os.html#miscellaneous-functions)“/dev/random”是一个更随机的随机源,但每当没有足够的熵。 (2认同)
  • @NullUserException在Linux上,/ dev / random使用已知的熵源作为输入,包括(但不限于)人类用户的鼠标移动,环境噪声等。尽管内核本身是确定性的,但结合使用内核+人类+环境不是。 (2认同)

Fed*_*ico 17

bytearray(random.getrandbits(8) for _ in xrange(size))
Run Code Online (Sandbox Code Playgroud)

比其他解决方案更快但不具有加密安全性.


Tat*_*eyr 14

获得安全的随机字节序列的另一种方法是使用secrets自Python 3.6起可用的标准库模块.

示例,基于给定的问题:

import secrets
b"\x00" + secrets.token_bytes(4) + b"\x00"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,访问:https: //docs.python.org/3/library/secrets.html


yan*_*yan 6

您是否希望将中间4个字节设置为随机值?

buf = '\x00' + ''.join(chr(random.randint(0,255)) for _ in range(4)) + '\x00'
Run Code Online (Sandbox Code Playgroud)


Max*_*xim 6

这可用于生成随机字节字符串(替换n为所需的数量):

import random
random_bytes = bytes([random.randrange(0, 256) for _ in range(0, n)])
-or-
random_bytes = bytes([random.randint(0, 255) for _ in range(0, n)])
-or-
random_bytes = bytes([random.getrandbits(8) for _ in range(0, n)])
Run Code Online (Sandbox Code Playgroud)

具体问题的答案将是:

import random
buf = b'\x00' + bytes([random.randrange(0, 256) for _ in range(0, 4)]) + b'\x00'
-or-
buf = b'\x00' + bytes([random.randint(0, 255) for _ in range(0, 4)]) + b'\x00'
-or-
buf = b'\x00' + bytes([random.getrandbits(8) for _ in range(0, 4)]) + b'\x00'
Run Code Online (Sandbox Code Playgroud)

正如其他人指出的那样,这不应该用于密码学,但对于其他一切来说它应该完全没问题。


Jan*_*sen 5

在POSIX平台上:

open("/dev/urandom","rb").read(4)
Run Code Online (Sandbox Code Playgroud)

使用/dev/random更好的随机化。


Sah*_*wal 5

我喜欢使用 numpy 库来实现这一点。

import numpy as np

X_1KB = 1024
X_256KB = 256 * X_1KB
X_1MB = 1024 * 1024
X_4MB = 4 * X_1MB
X_32MB = 32 * X_1MB
X_64MB = 2 * X_32MB
X_128MB = X_1MB * 128


np.random.bytes( X_1MB )
Run Code Online (Sandbox Code Playgroud)


Ric*_*cco 5

Python 3.9 添加了一个新random.randbytes方法。此方法生成随机字节:

from random import randbytes

randbytes(4)
Run Code Online (Sandbox Code Playgroud)

输出:

b'\xf3\xf5\xf8\x98'
Run Code Online (Sandbox Code Playgroud)

不过要小心。仅当您不处理密码学时才应使用它。如文档中所述:

此方法不应用于生成安全令牌。使用secrets.token_bytes()来代替。

  • 一件很酷的事情是允许使用“random.seed”设置确定性测试的种子:/sf/ask/2263056701/#66018128 (2认同)