반응형

 

파이썬, 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

 

반응형

+ Recent posts