python中的随机字节字符串

时间:2011-03-31 04:56:10

标签: python string random hex

我有buf =“\ x00 \ xFF \ xFF \ xFF \ xFF \ x00”

我怎样才能得到“\ xFF \ xFF \ xFF \ xFF”随机化

10 个答案:

答案 0 :(得分:47)

>>> import os
>>> "\x00"+os.urandom(4)+"\x00"
'\x00!\xc0zK\x00'

答案 1 :(得分:16)

bytearray(random.getrandbits(8) for _ in xrange(size))

比其他解决方案更快,但加密安全性不高。

答案 2 :(得分:11)

获取安全的随机字节序列的另一种方法是使用自Python 3.6以来可用的标准库import numpy as np;np.random.seed(1) import matplotlib.pyplot as plt # get some data a = np.random.rayleigh(3,111) h,_ = np.histogram(a) data = np.r_[[h]*10].T+np.random.rand(10,10)*11 # produce scaling for data y = np.cumsum(np.append([0],np.sum(data, axis=1))) x = np.arange(data.shape[1]+1) X,Y = np.meshgrid(x,y) # plot heatmap im = plt.pcolormesh(X,Y,data) # set ticks ticks = y[:-1] + np.diff(y)/2 plt.yticks(ticks, np.arange(len(ticks))) plt.xticks(np.arange(data.shape[1])+0.5,np.arange(data.shape[1])) # colorbar plt.colorbar(im) plt.show() 模块。

示例,基于给定的问题:

secrets

更多信息可在以下网址找到: https://docs.python.org/3/library/secrets.html

答案 3 :(得分:6)

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

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

答案 4 :(得分:5)

在POSIX平台上:

open("/dev/urandom","rb").read(4)

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

答案 5 :(得分:2)

这可用于生成随机字节的字符串(将“ 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'

正如其他人指出的那样,不应将其用于加密,但对于其他所有方面,它应该都很好。

答案 6 :(得分:2)

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

from random import randbytes

randbytes(4)

输出:

b'\xf3\xf5\xf8\x98'

但是要小心。仅在不处理密码学时才应使用它。如文档所述:

此方法不应用于生成安全令牌。请改用secrets.token_bytes()

答案 7 :(得分:1)

我喜欢使用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 )

答案 8 :(得分:0)

简单:

import random, operator
reduce(operator.add, ('%c' % random.randint(0, 255) for i in range(4)))

答案 9 :(得分:-2)

from random import randint 
rstr = ''.join( randint(0, 255) for i in range(4) )