web-dev-qa-db-fra.com

chaîne d'octets aléatoire en python

j'ai buf = "\ x00\xFF\xFF\xFF\xFF\x00"

comment puis-je obtenir le "\ xFF\xFF\xFF\xFF" au hasard

21
zack
>>> import os
>>> "\x00"+os.urandom(4)+"\x00"
'\x00!\xc0zK\x00'
44
John La Rooy
bytearray(random.getrandbits(8) for _ in xrange(size))

Plus rapide que d'autres solutions, mais pas cryptographiquement sécurisé.

14
Federico

Un autre moyen d’obtenir une séquence aléatoire d’octets sécurisée pourrait être d’utiliser le module standard secrets de la bibliothèque, disponible depuis Python 3.6.

Exemple, basé sur la question donnée:

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

Vous trouverez plus d’informations sur: https://docs.python.org/3/library/secrets.html

9
Tatiana Al-Chueyr

Voulez-vous que les 4 octets du milieu soient définis sur une valeur aléatoire?

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

Sur les plateformes POSIX:

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

Utilisez /dev/random pour une meilleure randomisation.

4
Janus Troelsen

J'aime utiliser la bibliothèque numpy pour cela.

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 )
1
Saher Ahwal

Simple:

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