我有一个字符串 buf="\x00\xFF\xFF\xFF\xFF\x00"
如何使其中的"\xFF\xFF\xFF\xFF"
随机化?
>>> import os
>>> "\x00"+os.urandom(4)+"\x00"
'\x00!\xc0zK\x00'
获取安全随机字节序列的另一种方式是使用自Python 3.6以来可用的标准库secrets
模块。
例如,基于所给问题:
import secrets
b"\x00" + secrets.token_bytes(4) + b"\x00"
更多信息可在此处找到: https://docs.python.org/3/library/secrets.html
bytearray(random.getrandbits(8) for _ in xrange(size))
比其他解决方案更快,但不具有加密安全性。
Python 3.9新增了一个random.randbytes
方法,该方法生成随机字节:
from random import randbytes
randbytes(4)
输出:
b'\xf3\xf5\xf8\x98'
但是要小心使用。正如文档中所述,它仅在您不涉及加密时使用:
此方法不应用于生成安全令牌。请改用
secrets.token_bytes()
。
random.seed
为确定性测试设置种子:https://dev59.com/047ea4cB1Zd3GeqPEKlQ#66018128 - Ciro Santilli OurBigBook.com在 POSIX 平台上:
open("/dev/urandom","rb").read(4)
使用/dev/random
来获得更好的随机性。
您是否希望将中间4个字节设置为随机值?
buf = '\x00' + ''.join(chr(random.randint(0,255)) for _ in range(4)) + '\x00'
这可以用来生成一串随机字节(替换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)])
针对这个具体的问题,答案如下:
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'
我喜欢使用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 )
简单:
import functools, random, operator
functools.reduce(operator.add, ('%c' % random.randint(0, 255) for i in range(4)))
"".join(...)
是将序列转换为字符串的首选方法。 - John La Rooyfrom random import randint
rstr = ''.join( randint(0, 255) for i in range(4) )
NameError: name 'buf' is not defined
- bradley.ayersstring
中,所以将int
改为string
字符。代码:rstr = "".join( chr(randint(0, 255)) for i in range(4))
。 - Anne
/dev/urandom
使用某种硬件随机数生成器,否则它的数字也是伪随机的。一个确定性的机器将始终生成伪随机数。 - NullUserExceptionurandom
(https://docs.python.org/2/library/os.html#miscellaneous-functions),`/dev/random`是更随机的随机源,但在没有足够熵时会阻塞。 - John La Rooy