반응형
https://delock.tistory.com/115
위 링크를 통해 스마트폰 패턴 암호화에 사용된 규칙을 정하고
3×3 그리드에서 최소 4개의 점을 연결하여 패턴을 만들고
패턴을 숫자로 표현한 후 스트링(문자열)으로 만든다.
완성된 스트링은 SHA256 알고리즘을 이용해 해시값으로 만든다.
import random
import hashlib
# 3x3 그리드의 각 점을 번호로 매핑
grid_points = [(0, 0), (0, 1), (0, 2),
(1, 0), (1, 1), (1, 2),
(2, 0), (2, 1), (2, 2)]
# 점을 랜덤하게 연결하여 패턴을 생성하는 함수
def generate_pattern(min_length=4, grid_size=3):
def is_valid_move(current, next_point, pattern):
if next_point in pattern:
return False
# Check if there's a point between current and next_point
if (abs(current[0] - next_point[0]) == 2 and current[1] == next_point[1]) or (abs(current[1] - next_point[1]) == 2 and current[0] == next_point[0]):
mid_point = ((current[0] + next_point[0]) // 2, (current[1] + next_point[1]) // 2)
if mid_point not in pattern:
return False
return True
pattern = []
current_point = random.choice(grid_points)
pattern.append(current_point)
while len(pattern) < min_length or (len(pattern) < grid_size**2 and random.random() > 0.3):
next_point = random.choice(grid_points)
if is_valid_move(current_point, next_point, pattern):
pattern.append(next_point)
current_point = next_point
return pattern
# 패턴을 문자열로 변환하는 함수
def pattern_to_string(pattern):
return ''.join(f'{x},{y}' for x, y in pattern)
# 문자열을 해시 값으로 변환하는 함수
def hash_pattern(pattern_str):
return hashlib.sha256(pattern_str.encode()).hexdigest()
# 랜덤 패턴 생성
pattern = generate_pattern()
pattern_str = pattern_to_string(pattern)
pattern_hash = hash_pattern(pattern_str)
print(f"Generated pattern: {pattern}")
print(f"Pattern string: {pattern_str}")
print(f"Pattern hash: {pattern_hash}")
랜덤실행결과(1)
Pattern string: 1,02,00,10,0
Pattern hash: e81a28aa71c599a0a93e51a3af606763ee391485968f29bb3114cf45d0303bab
랜덤실행결과(2)
Generated pattern: [(0, 1), (1, 0), (2, 2), (0, 0), (1, 2), (2, 0)]
Pattern string: 0,11,02,20,01,22,0
Pattern hash: f060055458c921da2b636eaa4e1c35ed5cba4e228ad8e1783d045fe977616050
랜덤실행결과(3)
Generated pattern: [(2, 2), (2, 1), (1, 0), (1, 1)]
Pattern string: 2,22,11,01,1
Pattern hash: 3b94079a69469f67b3710cc61b7693405aaf7a38216823c9cd04b389bea8acc2
728x90
'디지털포렌식(Digital forensic) > 키(key)' 카테고리의 다른 글
[파일] pycryptodome를 이용한 암호화, 복호화 (0) | 2023.12.01 |
---|---|
[파일] ZIP 파일 만들기 코드 (0) | 2023.11.30 |
윈도우즈 11의 기본값, SSD 암호화 ON (0) | 2023.10.24 |
[파일]QR 코드 생성 프로그램 (1) | 2023.10.17 |
아핀(affine) 암호, QAPASAA가 가르키는 나라는? (0) | 2023.09.10 |