/dev/random w Windowsie

Ostatnio musiałem skorzystać z możliwości “nieograniczonej” generacji ciągów pseudolosowych. W Linuxie sprawa jest prosta – otwieramy /dev/random i cytamy zeń wymaganą licznę znaków. Gorzej z tym pod Windowsem, który mimo, że podobne wirtualne urządzenie posiada, to nie umożliwia adekwatnego skorzystania z niego. Efekt podobny można jednak uzyskać – np. przez wywołanie, np przez win32com, funkcji CryptGenRandom z Advapi32.dll (msdn). Lub jeszcze prościej – skorzystać z random.SystemRandom. Z tym ostatnim jest jednak jeden problem – generuje n-bitowe liczby długie. Poniżej przykładowe zastosowanie z jednoczesną konwersją na ciąg znaków (coby lepiej /dev/random emulować ;)):

?View Code PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
nbit = 1024
r = random.SystemRandom().getrandbits(nbit)
devrandom = ""
char = 0
for c in xrange(1,nbit+1):
char |= r & 1
r >>= 1
if c % 8 == 0:
devrandom += chr(char)
char = 0
else:
char <<= 1

Po zakończeniu pętli w zmiennej devrandom znajdzie się (nbit/8) bajtowy ciąg losowych znaków.

0 Responses to “/dev/random w Windowsie”


  1. No Comments

Leave a Reply