반응형
파이썬, random 모듈을 대체하기 (os.urandom)
취약점 이슈로 random 모듈을 사용금지하는 경우에 그 기능을 대체하는 예제 코드입니다.
import os
def generate_random_number(start, end):
"""
os.urandom()을 사용하여 start와 end 사이의 랜덤 정수를 생성합니다.
Args:
start: 범위의 시작 값 (포함).
end: 범위의 끝 값 (포함).
Returns:
start와 end 사이의 랜덤 정수.
"""
num_bytes = (end - start + 1).bit_length() // 8 + 1
random_bytes = os.urandom(num_bytes)
random_int = int.from_bytes(random_bytes, byteorder='big')
return (random_int % (end - start + 1)) + start
def generate_random_string(chars, length):
"""
os.urandom()을 사용하여 주어진 문자열에서 중복되지 않은 랜덤 문자열을 생성합니다.
Args:
chars: 랜덤 문자열을 생성할 문자열.
length: 생성할 랜덤 문자열의 길이.
Returns:
중복되지 않은 랜덤 문자열.
"""
result = ''
char_list = list(chars)
for _ in range(length):
random_index = int.from_bytes(os.urandom(1), byteorder='big') % len(char_list)
result += char_list.pop(random_index)
return result
# 1~100 사이의 랜덤 값 생성
random_number = generate_random_number(1, 100)
print(random_number) # 59
text = "abcdefg1234!@#$"
random_string = generate_random_string(text, 5)
print(random_string) # fa!gd
반응형
'Python 활용' 카테고리의 다른 글
Azure App Service에 Python(Django, Flask, FastAPI) 웹앱 배포 (0) | 2024.11.27 |
---|---|
파이썬 프로그램 프로세스가 사용하는 메모리 크기 검사 (0) | 2024.10.23 |
파이썬 - asgi 버전(2, 3)에 따라 달라지는 uvicorn 호스팅 (0) | 2024.06.16 |
Python, SQLAlchemy DB migration 툴 (1) | 2024.06.12 |
파이썬, googletrans 패키지를 이용한 번역 (0) | 2024.05.15 |