Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 배우는 이미지 기반 스테가노그래피: 이미지 속에 메시지 숨기기

이 글에서는 Python을 이용해 이미지 기반 스테가노그래피(Steganography)를 구현하는 방법을 알아봅니다. 스테가노그래피는 텍스트나 데이터를 오디오, 비디오, 이미지 같은 미디어 파일 뒤에 몰래 숨기는 기술로, 정보 보안을 강화하고 허위 저작권 침해 주장으로부터 콘텐츠를 보호하는 데 유용하게 활용됩니다.

필요한 모듈과 개발 환경

메시지를 이미지에 숨기는 작업은 Python의 stepic 모듈이 제공하는 인코딩 기능을 통해 수행합니다. 그리고 이미지를 열고 화면에 표시하기 위해서는 PIL(Python Imaging Library)을 사용합니다.

권장 개발 환경은 Jupyter Notebook이며, 코드 실행 전 아래와 같이 필요한 의존성을 먼저 임포트합니다.

>>> import stepic

1단계: 이미지 불러오기

이번 예제에서는 아래 이미지에 텍스트를 숨겨 보겠습니다. 이미지를 다운로드한 뒤 Jupyter Notebook이 실행되는 로컬 폴더에 "logo.png"라는 이름으로 저장하세요.

물론 원하는 어떤 이미지든 사용할 수 있습니다. 이 경우 파일 경로만 큰따옴표 안에 정확히 지정해 주면 됩니다.

>>> img = Image.open('logo.png')
>>> img.show()

Image.open() 함수는 스테가노그래피를 적용할 대상 이미지를 여는 역할을 하며, .show() 함수를 호출하면 아래처럼 팝업 창 형태로 이미지를 확인할 수 있습니다.

2단계: 메시지 인코딩하기

이제 stepic 모듈을 사용해 메시지를 ASCII 값 기반의 8비트 바이너리 데이터로 변환하여 이미지에 삽입합니다. 인코딩에는 .encode() 함수를 사용하며, 이 함수는 이미지 객체숨길 메시지 두 개의 매개변수를 받습니다.

인코딩이 완료된 이미지는 .save() 함수를 통해 원본 파일에 저장합니다.

>>> img1 = stepic.encode(img, b'Tutorialspoint')
>>> img1.save('logo.png', 'PNG')

3단계: 인코딩된 이미지 확인

저장된 이미지를 다시 열어 화면에 표시해 보겠습니다.

>>> img1 = Image.open('logo.png')
>>> img1.show()

화면에 나타난 이미지를 보면 원본과 눈에 띄는 차이가 없다는 것을 알 수 있습니다. 이것이 바로 스테가노그래피의 핵심입니다. 메시지가 픽셀 데이터 안에 은닉되어 있기 때문에 육안으로는 전혀 식별할 수 없습니다.

4단계: 숨겨진 메시지 검증하기

메시지가 실제로 성공적으로 인코딩되었는지 확인하려면 아래 코드를 실행합니다.

>>> im2 = Image.open('logo.png')
>>> message_hidden = stepic.decode(im2)
>>> print(message_hidden)

실행 결과

'Tutorialspoint'

Python의 stepic 모듈에 내장된 디코더가 이미지 속에 숨겨진 메시지를 그대로 추출해 출력해 줍니다. 이처럼 인코딩과 디코딩 과정을 통해 데이터 은닉이 정상적으로 이루어졌음을 검증할 수 있습니다.

마무리

이번 글에서는 Python 3.x 환경에서 stepic 모듈과 PIL 모듈을 활용해 이미지 기반 스테가노그래피를 구현하는 전체 과정을 살펴보았습니다. 몇 줄의 간단한 코드만으로도 이미지에 메시지를 숨기고 다시 복원할 수 있으므로, 저작권 보호나 민감한 정보 전달 등 다양한 용도로 확장해 볼 수 있습니다.