The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets.
In particular, secrets should be used in preference to the default pseudo-random number generator in the random module, which is designed for modelling and simulation, not security or cryptography.
secrets 모듈은 파이썬 3.6부터 추가된 모듈입니다.
이 모듈을 사용하면 암호학적으로 강력한(cryptographically strong) 랜덤한 토큰을 만들어낸다고 합니다. random 모듈은 보안이나 암호를 목적으로 사용하면 안된다고 문서에 강조돼있습니다.
>>> import secrets
>>> secrets.token_hex(nbytes=16)
'17adbcf543e851aa9216acc9d7206b96'
>>> secrets.token_urlsafe(16)
'X7NYIolv893DXLunTzeTIQ'
>>> secrets.token_bytes(128 // 8)
b'\x0b\xdcA\xc0.\x0e\x87\x9b`\x93\\Ev\x1a|u'
nbytes 입력하면 입력한 만큼 hex 또는 byte string으로 변환해 랜덤한 토큰을 반환합니다. url-safe한 토큰을 만드는 것도 가능하네요. token_urlsafe는 base64 인코드된 값을 반환한다고 써있습니다.
nbytes is None이라면 모듈이 판단했을 때 적절한 값을 넣는다고 하는군요
DEFAULT_ENTROPY = 32 # number of bytes to return by default
# ...
def token_bytes(nbytes=None):
"""Return a random byte string containing *nbytes* bytes.
If *nbytes* is ``None`` or not supplied, a reasonable
default is used.
>>> token_bytes(16) #doctest:+SKIP
b'\\xebr\\x17D*t\\xae\\xd4\\xe3S\\xb6\\xe2\\xebP1\\x8b'
"""
if nbytes is None:
nbytes = DEFAULT_ENTROPY
return os.urandom(nbytes)
python3.8 기준으로 확인해보니 DEFAULT_ENTROPY == 32로 나와 있습니다.
이건 그냥 궁금해서 찾아본 tmi입니다
반응형
'프로그래밍 > Python' 카테고리의 다른 글
pip-autoremove: 라이브러리 디펜던시 한번에 지우기 (0) | 2021.08.23 |
---|---|
pip-chill: pip로 직접 설치한 라이브러리만 보는 법 (0) | 2021.08.23 |
[Python] 파이썬 GIL이란? (0) | 2021.04.22 |
[Python] 같은 keys를 갖는 dict로 새로운 dict 계산해 만드는 법 (0) | 2021.04.20 |
[Python] is, == 연산자 (0) | 2021.03.26 |