簡體   English   中英

python中的隨機字節字符串

[英]random byte string in python

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

我怎樣才能讓"\\xFF\\xFF\\xFF\\xFF"隨機化?

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

獲取安全隨機字節序列的另一種方法是使用標准庫secrets模塊,自 Python 3.6 起可用。

示例,基於給定的問題:

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))

比其他解決方案更快,但密碼不安全。

在 POSIX 平台上:

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

使用/dev/random以獲得更好的隨機化。

您是否希望將中間的 4 個字節設置為隨機值?

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

Python 3.9 添加了一個新的random.randbytes方法。 此方法生成隨機字節:

from random import randbytes

randbytes(4)

輸出:

b'\xf3\xf5\xf8\x98'

不過要小心。 僅當您不處理密碼學時才應使用它。 如文檔中所述:

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

我喜歡為此使用 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 )

這可用於生成一串隨機字節(將 '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'

正如其他人指出的那樣,這不應該用於密碼學,但對於其他一切,它應該完全沒問題。

簡單的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM