2012-06-21 2 views
1
난 단지 문자 범위에 걸릴 수있는 토큰을 생성 할 필요가

, 나는 +와 같은 다른 문자가 문제를 일으키는 원인이되는, binascii.b2a_base64(os.urandom(64)) 작업을 시도하고있다 [a-zA-Z0-9_]는/dev/urandom의 범위

.

/dev/urandom (리눅스에 있습니다.)의 범위는 무엇입니까? 그래서 출력 정수를 나 자신으로 균일하게 매핑 할 수 있습니다.

답변

4

바이트를 생성하므로 0x00에서 0xFF를 포함합니다.

+0

좋아. 시험을 치뤘지만, 나는 단지 그걸 확인하고 싶다. 이제는 256 문자에 62 문자를 균일하게 맞추어야합니다. – Pwnna

+0

범위를 제한하여 문자 수와 256 사이의 LCM을 낮추십시오. –

+2

4로 나누고 [re-roll 63 's] (http : /en.wikipedia.org/wiki/Rejection_sampling)? –

1

/dev/urandom은 단순히 임의의 바이트를 제공합니다. 읽는 모든 바이트는 0 ~ 255 범위에 있으며 균일하게 분포되어 있습니다.

현재 문제를 처리하는 간단한 방법은 +=자를 필터링하는 것입니다. 쉘에서는 ... | tr -d += | ...이 될 것입니다. 나는 가장 Pythonic 한 접근법을 모른다. 그러나 이것은 작동하는 것처럼 보인다 :

>>> import re 
>>> re.sub(r'\+|=', '', "abcdef+=") 
'abcdef'