случайная строка байтов в питоне - PullRequest
24 голосов
/ 31 марта 2011

у меня есть buf = "\ x00 \ xFF \ xFF \ xFF \ xFF \ x00"

как я могу получить "\ xFF \ xFF \ xFF \ xFF" рандомизировать

Ответы [ 8 ]

47 голосов
/ 31 марта 2011
>>> import os
>>> "\x00"+os.urandom(4)+"\x00"
'\x00!\xc0zK\x00'
16 голосов
/ 25 января 2015
bytearray(random.getrandbits(8) for _ in xrange(size))

Быстрее, чем другие решения, но не криптографически безопасны.

11 голосов
/ 26 января 2018

Альтернативным способом получения безопасной случайной последовательности байтов может быть использование стандартного модуля secrets библиотеки, доступного с Python 3.6.

Пример, основанный на заданном вопросе:

import secrets
b"\x00" + secrets.token_bytes(4) + b"\x00"

Более подробную информацию можно найти по адресу: https://docs.python.org/3/library/secrets.html

6 голосов
/ 31 марта 2011

Хотите, чтобы средние 4 байта были установлены в случайное значение?

buf = '\x00' + ''.join(chr(random.randint(0,255)) for _ in range(4)) + '\x00'
5 голосов
/ 12 октября 2012

На платформах POSIX:

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

Используйте /dev/random для лучшей рандомизации.

1 голос
/ 06 февраля 2018

Мне нравится использовать библиотеку 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 )
0 голосов
/ 31 марта 2011

Simple:

import random, operator
reduce(operator.add, ('%c' % random.randint(0, 255) for i in range(4)))
0 голосов
/ 31 марта 2011
from random import randint 
rstr = ''.join( randint(0, 255) for i in range(4) )
...